From: Leif Åstrand Date: Thu, 16 Jan 2014 07:03:16 +0000 (+0000) Subject: Revert "Theme Parser is deleted, build procedure now generates it (#13161)." X-Git-Tag: 7.2.0.beta1~214 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=dd0479cdefa52091a33ff63f45fc32ae76c4b4f8;p=vaadin-framework.git Revert "Theme Parser is deleted, build procedure now generates it (#13161)." Causes a multitude of compile errors on the build server. This reverts commit d2874fde4b8c6afa24f0f6535e0d6fcabc489f51. Change-Id: I49787b347944b614b9e98778b3219b7045cf2bfe --- diff --git a/.gitignore b/.gitignore index 9b120c7c3a..30c8597b16 100644 --- a/.gitignore +++ b/.gitignore @@ -71,13 +71,3 @@ WebContent/VAADIN/vaadinPush.debug.js # build result folders */result result - -# /theme-compiler -/theme-compiler/result -/theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java -/theme-compiler/src/com/vaadin/sass/internal/parser/ParserImpl.java -/theme-compiler/src/com/vaadin/sass/internal/parser/ParserImplConstants.java -/theme-compiler/src/com/vaadin/sass/internal/parser/ParserImplTokenManager.java -/theme-compiler/src/com/vaadin/sass/internal/parser/Token.java -/theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java -/theme-compiler/src/com/vaadin/sass/internal/parser/ParseException.java diff --git a/build/ide.xml b/build/ide.xml index 51a9d82272..22e6818bea 100755 --- a/build/ide.xml +++ b/build/ide.xml @@ -36,6 +36,7 @@ + @@ -67,14 +68,9 @@ - - - - - - + - + @@ -146,7 +142,4 @@ - - - diff --git a/theme-compiler/build.xml b/theme-compiler/build.xml index 623d2e4ec7..03d0531a68 100644 --- a/theme-compiler/build.xml +++ b/theme-compiler/build.xml @@ -23,7 +23,7 @@ - + @@ -32,29 +32,15 @@ - - - - - - + + + - - - - - - - - - - - diff --git a/theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java b/theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java index 35400f7d40..ed6b98f5ac 100644 --- a/theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java +++ b/theme-compiler/src/com/vaadin/sass/internal/ScssStylesheet.java @@ -171,7 +171,7 @@ public class ScssStylesheet extends Node { source.setEncoding(parentStylesheet.getCharset()); } - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); parser.setErrorHandler(errorHandler); parser.setDocumentHandler(documentHandler); diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java b/theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java new file mode 100644 index 0000000000..c22f19451b --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/CharStream.java @@ -0,0 +1,130 @@ +/* + * 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. CharStream.java Version 5.0 */ +/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +package com.vaadin.sass.internal.parser; + +/** + * This interface describes a character stream that maintains line and + * column number positions of the characters. It also has the capability + * to backup the stream to some extent. An implementation of this + * interface is used in the TokenManager implementation generated by + * JavaCCParser. + * + * All the methods except backup can be implemented in any fashion. backup + * needs to be implemented correctly for the correct operation of the lexer. + * Rest of the methods are all used to get information like line number, + * column number and the String that constitutes a token and are not used + * by the lexer. Hence their implementation won't affect the generated lexer's + * operation. + */ + +public +interface CharStream { + + /** + * Returns the next character from the selected input. The method + * of selecting the input is the responsibility of the class + * implementing this interface. Can throw any java.io.IOException. + */ + char readChar() throws java.io.IOException; + + @Deprecated + /** + * Returns the column position of the character last read. + * @deprecated + * @see #getEndColumn + */ + int getColumn(); + + @Deprecated + /** + * Returns the line number of the character last read. + * @deprecated + * @see #getEndLine + */ + int getLine(); + + /** + * Returns the column number of the last character for current token (being + * matched after the last call to BeginTOken). + */ + int getEndColumn(); + + /** + * Returns the line number of the last character for current token (being + * matched after the last call to BeginTOken). + */ + int getEndLine(); + + /** + * Returns the column number of the first character for current token (being + * matched after the last call to BeginTOken). + */ + int getBeginColumn(); + + /** + * Returns the line number of the first character for current token (being + * matched after the last call to BeginTOken). + */ + int getBeginLine(); + + /** + * Backs up the input stream by amount steps. Lexer calls this method if it + * had already read some characters, but could not use them to match a + * (longer) token. So, they will be used again as the prefix of the next + * token and it is the implemetation's responsibility to do this right. + */ + void backup(int amount); + + /** + * Returns the next character that marks the beginning of the next token. + * All characters must remain in the buffer between two successive calls + * to this method to implement backup correctly. + */ + char BeginToken() throws java.io.IOException; + + /** + * Returns a string made up of characters from the marked token beginning + * to the current buffer position. Implementations have the choice of returning + * anything that they want to. For example, for efficiency, one might decide + * to just return null, which is a valid implementation. + */ + String GetImage(); + + /** + * Returns an array of characters that make up the suffix of length 'len' for + * the currently matched token. This is used to build up the matched string + * for use in actions in the case of MORE. A simple and inefficient + * implementation of this is as follows : + * + * { + * String t = GetImage(); + * return t.substring(t.length() - len, t.length()).toCharArray(); + * } + */ + char[] GetSuffix(int len); + + /** + * The lexer calls this function to indicate that it is done with the stream + * and hence implementations can free any resources held by this class. + * Again, the body of this function can be just empty and it will not + * affect the lexer's operation. + */ + void Done(); + +} +/* JavaCC - OriginalChecksum=deb80d024b50bdc8bfaadaf528157233 (do not edit this line) */ diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Generic_CharStream.java b/theme-compiler/src/com/vaadin/sass/internal/parser/Generic_CharStream.java new file mode 100644 index 0000000000..7bc2973311 --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Generic_CharStream.java @@ -0,0 +1,370 @@ +/* + * 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. Generic_CharStream.java Version 0.7pre6 */ +package com.vaadin.sass.internal.parser; + +/** + * An implementation of interface CharStream, where the stream is assumed to + * contain only ASCII characters (without unicode processing). + */ + +public final class Generic_CharStream implements CharStream +{ + public static final boolean staticFlag = false; + int bufsize; + int available; + int tokenBegin; + public int bufpos = -1; + private int bufline[]; + private int bufcolumn[]; + + private int column = 0; + private int line = 1; + + private boolean prevCharIsCR = false; + private boolean prevCharIsLF = false; + + private java.io.Reader reader; + + private char[] buffer; + private int maxNextCharInd = 0; + private int inBuf = 0; + + private final void ExpandBuff(boolean wrapAround) + { + char[] newbuffer = new char[bufsize + 2048]; + int newbufline[] = new int[bufsize + 2048]; + int newbufcolumn[] = new int[bufsize + 2048]; + + try + { + if (wrapAround) + { + System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); + System.arraycopy(buffer, 0, newbuffer, + bufsize - tokenBegin, bufpos); + buffer = newbuffer; + + System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); + System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); + bufline = newbufline; + + System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); + System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); + bufcolumn = newbufcolumn; + + maxNextCharInd = (bufpos += (bufsize - tokenBegin)); + } + else + { + System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); + buffer = newbuffer; + + System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); + bufline = newbufline; + + System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); + bufcolumn = newbufcolumn; + + maxNextCharInd = (bufpos -= tokenBegin); + } + } + catch (Throwable t) + { + throw new Error(t.getMessage()); + } + + + bufsize += 2048; + available = bufsize; + tokenBegin = 0; + } + + private final void FillBuff() throws java.io.IOException + { + if (maxNextCharInd == available) + { + if (available == bufsize) + { + if (tokenBegin > 2048) + { + bufpos = maxNextCharInd = 0; + available = tokenBegin; + } + else if (tokenBegin < 0) + bufpos = maxNextCharInd = 0; + else + ExpandBuff(false); + } + else if (available > tokenBegin) + available = bufsize; + else if ((tokenBegin - available) < 2048) + ExpandBuff(true); + else + available = tokenBegin; + } + + int i; + try { + if ((i = reader.read(buffer, maxNextCharInd, + available - maxNextCharInd)) == -1) + { + reader.close(); + throw new java.io.IOException(); + } + else + maxNextCharInd += i; + return; + } + catch(java.io.IOException e) { + --bufpos; + backup(0); + if (tokenBegin == -1) + tokenBegin = bufpos; + throw e; + } + } + + public final char BeginToken() throws java.io.IOException + { + tokenBegin = -1; + char c = readChar(); + tokenBegin = bufpos; + + return c; + } + + private final void UpdateLineColumn(char c) + { + column++; + + if (prevCharIsLF) + { + prevCharIsLF = false; + line += (column = 1); + } + else if (prevCharIsCR) + { + prevCharIsCR = false; + if (c == '\n') + { + prevCharIsLF = true; + } + else + line += (column = 1); + } + + switch (c) + { + case '\r' : + prevCharIsCR = true; + break; + case '\n' : + prevCharIsLF = true; + break; + case '\t' : + column--; + column += (8 - (column & 07)); + break; + default : + break; + } + + bufline[bufpos] = line; + bufcolumn[bufpos] = column; + } + + public final char readChar() throws java.io.IOException + { + if (inBuf > 0) + { + --inBuf; + return (char)((char)0xff & buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos]); + } + + if (++bufpos >= maxNextCharInd) + FillBuff(); + + char c = (char)((char)0xff & buffer[bufpos]); + + UpdateLineColumn(c); + return (c); + } + + /** + * @deprecated + * @see #getEndColumn + */ + + public final int getColumn() { + return bufcolumn[bufpos]; + } + + /** + * @deprecated + * @see #getEndLine + */ + + public final int getLine() { + return bufline[bufpos]; + } + + public final int getEndColumn() { + return bufcolumn[bufpos]; + } + + public final int getEndLine() { + return bufline[bufpos]; + } + + public final int getBeginColumn() { + return bufcolumn[tokenBegin]; + } + + public final int getBeginLine() { + return bufline[tokenBegin]; + } + + public final void backup(int amount) { + + inBuf += amount; + if ((bufpos -= amount) < 0) + bufpos += bufsize; + } + + public Generic_CharStream(java.io.Reader dstream, int startline, + int startcolumn, int buffersize) + { + reader = dstream; + line = startline; + column = startcolumn - 1; + + available = bufsize = buffersize; + buffer = new char[buffersize]; + bufline = new int[buffersize]; + bufcolumn = new int[buffersize]; + } + + public Generic_CharStream(java.io.Reader dstream, int startline, + int startcolumn) + { + this(dstream, startline, startcolumn, 4096); + } + public void ReInit(java.io.Reader dstream, int startline, + int startcolumn, int buffersize) + { + reader = dstream; + line = startline; + column = startcolumn - 1; + + if (buffer == null || buffersize != buffer.length) + { + available = bufsize = buffersize; + buffer = new char[buffersize]; + bufline = new int[buffersize]; + bufcolumn = new int[buffersize]; + } + prevCharIsLF = prevCharIsCR = false; + tokenBegin = inBuf = maxNextCharInd = 0; + bufpos = -1; + } + + public void ReInit(java.io.Reader dstream, int startline, + int startcolumn) + { + ReInit(dstream, startline, startcolumn, 4096); + } + + public final String GetImage() + { + if (bufpos >= tokenBegin) + return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); + else + return new String(buffer, tokenBegin, bufsize - tokenBegin) + + new String(buffer, 0, bufpos + 1); + } + + public final char[] GetSuffix(int len) + { + char[] ret = new char[len]; + + if ((bufpos + 1) >= len) + System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); + else + { + System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, + len - bufpos - 1); + System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); + } + return ret; + } + + public void Done() + { + buffer = null; + bufline = null; + bufcolumn = null; + } + + /** + * Method to adjust line and column numbers for the start of a token.
+ */ + public void adjustBeginLineColumn(int newLine, int newCol) + { + int start = tokenBegin; + int len; + + if (bufpos >= tokenBegin) + { + len = bufpos - tokenBegin + inBuf + 1; + } + else + { + len = bufsize - tokenBegin + bufpos + 1 + inBuf; + } + + int i = 0, j = 0, k = 0; + int nextColDiff = 0, columnDiff = 0; + + while (i < len && + bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) + { + bufline[j] = newLine; + nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; + bufcolumn[j] = newCol + columnDiff; + columnDiff = nextColDiff; + i++; + } + + if (i < len) + { + bufline[j] = newLine++; + bufcolumn[j] = newCol + columnDiff; + + while (i++ < len) + { + if (bufline[j = start % bufsize] != bufline[++start % bufsize]) + bufline[j] = newLine++; + else + bufline[j] = newLine; + } + } + + line = bufline[j]; + column = bufcolumn[j]; + } + +} diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Generic_CharStream.jj b/theme-compiler/src/com/vaadin/sass/internal/parser/Generic_CharStream.jj deleted file mode 100644 index 7bc2973311..0000000000 --- a/theme-compiler/src/com/vaadin/sass/internal/parser/Generic_CharStream.jj +++ /dev/null @@ -1,370 +0,0 @@ -/* - * 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. Generic_CharStream.java Version 0.7pre6 */ -package com.vaadin.sass.internal.parser; - -/** - * An implementation of interface CharStream, where the stream is assumed to - * contain only ASCII characters (without unicode processing). - */ - -public final class Generic_CharStream implements CharStream -{ - public static final boolean staticFlag = false; - int bufsize; - int available; - int tokenBegin; - public int bufpos = -1; - private int bufline[]; - private int bufcolumn[]; - - private int column = 0; - private int line = 1; - - private boolean prevCharIsCR = false; - private boolean prevCharIsLF = false; - - private java.io.Reader reader; - - private char[] buffer; - private int maxNextCharInd = 0; - private int inBuf = 0; - - private final void ExpandBuff(boolean wrapAround) - { - char[] newbuffer = new char[bufsize + 2048]; - int newbufline[] = new int[bufsize + 2048]; - int newbufcolumn[] = new int[bufsize + 2048]; - - try - { - if (wrapAround) - { - System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); - System.arraycopy(buffer, 0, newbuffer, - bufsize - tokenBegin, bufpos); - buffer = newbuffer; - - System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); - System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); - bufline = newbufline; - - System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); - System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); - bufcolumn = newbufcolumn; - - maxNextCharInd = (bufpos += (bufsize - tokenBegin)); - } - else - { - System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); - buffer = newbuffer; - - System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); - bufline = newbufline; - - System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); - bufcolumn = newbufcolumn; - - maxNextCharInd = (bufpos -= tokenBegin); - } - } - catch (Throwable t) - { - throw new Error(t.getMessage()); - } - - - bufsize += 2048; - available = bufsize; - tokenBegin = 0; - } - - private final void FillBuff() throws java.io.IOException - { - if (maxNextCharInd == available) - { - if (available == bufsize) - { - if (tokenBegin > 2048) - { - bufpos = maxNextCharInd = 0; - available = tokenBegin; - } - else if (tokenBegin < 0) - bufpos = maxNextCharInd = 0; - else - ExpandBuff(false); - } - else if (available > tokenBegin) - available = bufsize; - else if ((tokenBegin - available) < 2048) - ExpandBuff(true); - else - available = tokenBegin; - } - - int i; - try { - if ((i = reader.read(buffer, maxNextCharInd, - available - maxNextCharInd)) == -1) - { - reader.close(); - throw new java.io.IOException(); - } - else - maxNextCharInd += i; - return; - } - catch(java.io.IOException e) { - --bufpos; - backup(0); - if (tokenBegin == -1) - tokenBegin = bufpos; - throw e; - } - } - - public final char BeginToken() throws java.io.IOException - { - tokenBegin = -1; - char c = readChar(); - tokenBegin = bufpos; - - return c; - } - - private final void UpdateLineColumn(char c) - { - column++; - - if (prevCharIsLF) - { - prevCharIsLF = false; - line += (column = 1); - } - else if (prevCharIsCR) - { - prevCharIsCR = false; - if (c == '\n') - { - prevCharIsLF = true; - } - else - line += (column = 1); - } - - switch (c) - { - case '\r' : - prevCharIsCR = true; - break; - case '\n' : - prevCharIsLF = true; - break; - case '\t' : - column--; - column += (8 - (column & 07)); - break; - default : - break; - } - - bufline[bufpos] = line; - bufcolumn[bufpos] = column; - } - - public final char readChar() throws java.io.IOException - { - if (inBuf > 0) - { - --inBuf; - return (char)((char)0xff & buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos]); - } - - if (++bufpos >= maxNextCharInd) - FillBuff(); - - char c = (char)((char)0xff & buffer[bufpos]); - - UpdateLineColumn(c); - return (c); - } - - /** - * @deprecated - * @see #getEndColumn - */ - - public final int getColumn() { - return bufcolumn[bufpos]; - } - - /** - * @deprecated - * @see #getEndLine - */ - - public final int getLine() { - return bufline[bufpos]; - } - - public final int getEndColumn() { - return bufcolumn[bufpos]; - } - - public final int getEndLine() { - return bufline[bufpos]; - } - - public final int getBeginColumn() { - return bufcolumn[tokenBegin]; - } - - public final int getBeginLine() { - return bufline[tokenBegin]; - } - - public final void backup(int amount) { - - inBuf += amount; - if ((bufpos -= amount) < 0) - bufpos += bufsize; - } - - public Generic_CharStream(java.io.Reader dstream, int startline, - int startcolumn, int buffersize) - { - reader = dstream; - line = startline; - column = startcolumn - 1; - - available = bufsize = buffersize; - buffer = new char[buffersize]; - bufline = new int[buffersize]; - bufcolumn = new int[buffersize]; - } - - public Generic_CharStream(java.io.Reader dstream, int startline, - int startcolumn) - { - this(dstream, startline, startcolumn, 4096); - } - public void ReInit(java.io.Reader dstream, int startline, - int startcolumn, int buffersize) - { - reader = dstream; - line = startline; - column = startcolumn - 1; - - if (buffer == null || buffersize != buffer.length) - { - available = bufsize = buffersize; - buffer = new char[buffersize]; - bufline = new int[buffersize]; - bufcolumn = new int[buffersize]; - } - prevCharIsLF = prevCharIsCR = false; - tokenBegin = inBuf = maxNextCharInd = 0; - bufpos = -1; - } - - public void ReInit(java.io.Reader dstream, int startline, - int startcolumn) - { - ReInit(dstream, startline, startcolumn, 4096); - } - - public final String GetImage() - { - if (bufpos >= tokenBegin) - return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); - else - return new String(buffer, tokenBegin, bufsize - tokenBegin) + - new String(buffer, 0, bufpos + 1); - } - - public final char[] GetSuffix(int len) - { - char[] ret = new char[len]; - - if ((bufpos + 1) >= len) - System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); - else - { - System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, - len - bufpos - 1); - System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); - } - return ret; - } - - public void Done() - { - buffer = null; - bufline = null; - bufcolumn = null; - } - - /** - * Method to adjust line and column numbers for the start of a token.
- */ - public void adjustBeginLineColumn(int newLine, int newCol) - { - int start = tokenBegin; - int len; - - if (bufpos >= tokenBegin) - { - len = bufpos - tokenBegin + inBuf + 1; - } - else - { - len = bufsize - tokenBegin + bufpos + 1 + inBuf; - } - - int i = 0, j = 0, k = 0; - int nextColDiff = 0, columnDiff = 0; - - while (i < len && - bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) - { - bufline[j] = newLine; - nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; - bufcolumn[j] = newCol + columnDiff; - columnDiff = nextColDiff; - i++; - } - - if (i < len) - { - bufline[j] = newLine++; - bufcolumn[j] = newCol + columnDiff; - - while (i++ < len) - { - if (bufline[j = start % bufsize] != bufline[++start % bufsize]) - bufline[j] = newLine++; - else - bufline[j] = newLine; - } - } - - line = bufline[j]; - column = bufcolumn[j]; - } - -} diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/LocatorImpl.java b/theme-compiler/src/com/vaadin/sass/internal/parser/LocatorImpl.java index 825b65fa24..ac244a9582 100644 --- a/theme-compiler/src/com/vaadin/sass/internal/parser/LocatorImpl.java +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/LocatorImpl.java @@ -51,34 +51,82 @@ public class LocatorImpl implements Locator { int line; int column; - @Override public String getURI() { return uri; } - @Override public int getLineNumber() { return line; } - @Override public int getColumnNumber() { return column; } /** - * Creates a LocatorImpl + * Creates a new LocatorImpl + */ + public LocatorImpl(Parser p) { + if (W3CDebug) { + System.err.println("LocatorImpl::newLocator(" + p + ");"); + } + uri = p.source.getURI(); + line = p.token.beginLine; + column = p.token.beginColumn; + } + + /** + * Reinitializes a LocatorImpl + */ + public LocatorImpl(Parser p, Token tok) { + if (W3CDebug) { + System.err.println("LocatorImpl::newLocator(" + p + ", " + tok + + ");"); + } + uri = p.source.getURI(); + line = tok.beginLine; + column = tok.beginColumn; + } + + /** + * Reinitializes a LocatorImpl */ public LocatorImpl(Parser p, int line, int column) { if (W3CDebug) { System.err.println("LocatorImpl::newLocator(" + p + ", " + line + ", " + column + ");"); } - uri = p.getInputSource().getURI(); + uri = p.source.getURI(); this.line = line; this.column = column; } + /** + * Reinitializes a LocatorImpl + */ + public LocatorImpl reInit(Parser p) { + if (W3CDebug) { + System.err.println("LocatorImpl::reInit(" + p + ");"); + } + uri = p.source.getURI(); + line = p.token.beginLine; + column = p.token.beginColumn; + return this; + } + + /** + * Reinitializes a LocatorImpl + */ + public LocatorImpl reInit(Parser p, Token tok) { + if (W3CDebug) { + System.err.println("LocatorImpl::reInit(" + p + ", " + tok + ");"); + } + uri = p.source.getURI(); + line = tok.beginLine; + column = tok.beginColumn; + return this; + } + /** * Reinitializes a LocatorImpl */ @@ -87,7 +135,7 @@ public class LocatorImpl implements Locator { System.err.println("LocatorImpl::reInit(" + p + ", " + line + ", " + column + ");"); } - uri = p.getInputSource().getURI(); + uri = p.source.getURI(); this.line = line; this.column = column; return this; diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/ParseException.java b/theme-compiler/src/com/vaadin/sass/internal/parser/ParseException.java index d84decb771..392d71e767 100644 --- a/theme-compiler/src/com/vaadin/sass/internal/parser/ParseException.java +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/ParseException.java @@ -19,17 +19,185 @@ package com.vaadin.sass.internal.parser; import org.w3c.css.sac.CSSException; /** - * Do not modify this file. It will be regenerated by the build procedure. Edit - * ParseException.jj file instead. The reason of this file presence here: avoid - * compilation errors if build procedure hasn't been yet executed. + * This exception is thrown when parse errors are encountered. You can + * explicitly create objects of this exception type by calling the method + * generateParseException in the generated parser. + * + * You can modify this class to customize your error reporting mechanisms so + * long as you retain the public fields. */ public class ParseException extends CSSException { + private static final long serialVersionUID = -8556588037264585977L; + + /** + * This constructor is used by the method "generateParseException" in the + * generated parser. Calling this constructor generates a new object of this + * type with the fields "currentToken", "expectedTokenSequences", and + * "tokenImage" set. The boolean flag "specialConstructor" is also set to + * true to indicate that this constructor was used to create this object. + * This constructor calls its super class with the empty string to force the + * "toString" method of parent class "Throwable" to print the error message + * in the form: ParseException: + */ + public ParseException(Token currentTokenVal, + int[][] expectedTokenSequencesVal, String[] tokenImageVal) { + super(""); + specialConstructor = true; + currentToken = currentTokenVal; + expectedTokenSequences = expectedTokenSequencesVal; + tokenImage = tokenImageVal; + } + + /** + * The following constructors are for use by you for whatever purpose you + * can think of. Constructing the exception in this manner makes the + * exception behave in the normal way - i.e., as documented in the class + * "Throwable". The fields "errorToken", "expectedTokenSequences", and + * "tokenImage" do not contain relevant information. The JavaCC generated + * code does not use these constructors. + */ public ParseException() { super(); + specialConstructor = false; } public ParseException(String message) { super(message); + specialConstructor = false; + } + + /** + * This variable determines which constructor was used to create this object + * and thereby affects the semantics of the "getMessage" method (see below). + */ + protected boolean specialConstructor; + + /** + * This is the last token that has been consumed successfully. If this + * object has been created due to a parse error, the token followng this + * token will (therefore) be the first error token. + */ + public Token currentToken; + + /** + * Each entry in this array is an array of integers. Each array of integers + * represents a sequence of tokens (by their ordinal values) that is + * expected at this point of the parse. + */ + public int[][] expectedTokenSequences; + + /** + * This is a reference to the "tokenImage" array of the generated parser + * within which the parse error occurred. This array is defined in the + * generated ...Constants interface. + */ + public String[] tokenImage; + + /** + * This method has the standard behavior when this object has been created + * using the standard constructors. Otherwise, it uses "currentToken" and + * "expectedTokenSequences" to generate a parse error message and returns + * it. If this object has been created due to a parse error, and you do not + * catch it (it gets thrown from the parser), then this method is called + * during the printing of the final stack trace, and hence the correct error + * message gets displayed. + */ + @Override + public String getMessage() { + if (!specialConstructor) { + return super.getMessage(); + } + String expected = ""; + int maxSize = 0; + for (int i = 0; i < expectedTokenSequences.length; i++) { + if (maxSize < expectedTokenSequences[i].length) { + maxSize = expectedTokenSequences[i].length; + } + for (int j = 0; j < expectedTokenSequences[i].length; j++) { + expected += tokenImage[expectedTokenSequences[i][j]] + " "; + } + if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { + expected += "..."; + } + expected += eol + " "; + } + String retval = "Encountered \""; + Token tok = currentToken.next; + for (int i = 0; i < maxSize; i++) { + if (i != 0) { + retval += " "; + } + if (tok.kind == 0) { + retval += tokenImage[0]; + break; + } + retval += add_escapes(tok.image); + tok = tok.next; + } + retval += "\" at line " + currentToken.next.beginLine + ", column " + + currentToken.next.beginColumn + "." + eol; + if (expectedTokenSequences.length == 1) { + retval += "Was expecting:" + eol + " "; + } else { + retval += "Was expecting one of:" + eol + " "; + } + retval += expected; + return retval; } + + /** + * The end of line string for this machine. + */ + protected String eol = System.getProperty("line.separator", "\n"); + + /** + * Used to convert raw characters to their escaped version when these raw + * version cannot be used as part of an ASCII string literal. + */ + protected String add_escapes(String str) { + StringBuffer retval = new StringBuffer(); + char ch; + for (int i = 0; i < str.length(); i++) { + switch (str.charAt(i)) { + case 0: + continue; + case '\b': + retval.append("\\b"); + continue; + case '\t': + retval.append("\\t"); + continue; + case '\n': + retval.append("\\n"); + continue; + case '\f': + retval.append("\\f"); + continue; + case '\r': + retval.append("\\r"); + continue; + case '\"': + retval.append("\\\""); + continue; + case '\'': + retval.append("\\\'"); + continue; + case '\\': + retval.append("\\\\"); + continue; + default: + if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { + String s = "0000" + Integer.toString(ch, 16); + retval.append("\\u" + + s.substring(s.length() - 4, s.length())); + } else { + retval.append(ch); + } + continue; + } + } + return retval.toString(); + } + } diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/ParseException.jj b/theme-compiler/src/com/vaadin/sass/internal/parser/ParseException.jj deleted file mode 100644 index 392d71e767..0000000000 --- a/theme-compiler/src/com/vaadin/sass/internal/parser/ParseException.jj +++ /dev/null @@ -1,203 +0,0 @@ -/* - * 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. ParseException.java Version 0.7pre6 */ -package com.vaadin.sass.internal.parser; - -import org.w3c.css.sac.CSSException; - -/** - * This exception is thrown when parse errors are encountered. You can - * explicitly create objects of this exception type by calling the method - * generateParseException in the generated parser. - * - * You can modify this class to customize your error reporting mechanisms so - * long as you retain the public fields. - */ -public class ParseException extends CSSException { - private static final long serialVersionUID = -8556588037264585977L; - - /** - * This constructor is used by the method "generateParseException" in the - * generated parser. Calling this constructor generates a new object of this - * type with the fields "currentToken", "expectedTokenSequences", and - * "tokenImage" set. The boolean flag "specialConstructor" is also set to - * true to indicate that this constructor was used to create this object. - * This constructor calls its super class with the empty string to force the - * "toString" method of parent class "Throwable" to print the error message - * in the form: ParseException: - */ - public ParseException(Token currentTokenVal, - int[][] expectedTokenSequencesVal, String[] tokenImageVal) { - super(""); - specialConstructor = true; - currentToken = currentTokenVal; - expectedTokenSequences = expectedTokenSequencesVal; - tokenImage = tokenImageVal; - } - - /** - * The following constructors are for use by you for whatever purpose you - * can think of. Constructing the exception in this manner makes the - * exception behave in the normal way - i.e., as documented in the class - * "Throwable". The fields "errorToken", "expectedTokenSequences", and - * "tokenImage" do not contain relevant information. The JavaCC generated - * code does not use these constructors. - */ - - public ParseException() { - super(); - specialConstructor = false; - } - - public ParseException(String message) { - super(message); - specialConstructor = false; - } - - /** - * This variable determines which constructor was used to create this object - * and thereby affects the semantics of the "getMessage" method (see below). - */ - protected boolean specialConstructor; - - /** - * This is the last token that has been consumed successfully. If this - * object has been created due to a parse error, the token followng this - * token will (therefore) be the first error token. - */ - public Token currentToken; - - /** - * Each entry in this array is an array of integers. Each array of integers - * represents a sequence of tokens (by their ordinal values) that is - * expected at this point of the parse. - */ - public int[][] expectedTokenSequences; - - /** - * This is a reference to the "tokenImage" array of the generated parser - * within which the parse error occurred. This array is defined in the - * generated ...Constants interface. - */ - public String[] tokenImage; - - /** - * This method has the standard behavior when this object has been created - * using the standard constructors. Otherwise, it uses "currentToken" and - * "expectedTokenSequences" to generate a parse error message and returns - * it. If this object has been created due to a parse error, and you do not - * catch it (it gets thrown from the parser), then this method is called - * during the printing of the final stack trace, and hence the correct error - * message gets displayed. - */ - @Override - public String getMessage() { - if (!specialConstructor) { - return super.getMessage(); - } - String expected = ""; - int maxSize = 0; - for (int i = 0; i < expectedTokenSequences.length; i++) { - if (maxSize < expectedTokenSequences[i].length) { - maxSize = expectedTokenSequences[i].length; - } - for (int j = 0; j < expectedTokenSequences[i].length; j++) { - expected += tokenImage[expectedTokenSequences[i][j]] + " "; - } - if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) { - expected += "..."; - } - expected += eol + " "; - } - String retval = "Encountered \""; - Token tok = currentToken.next; - for (int i = 0; i < maxSize; i++) { - if (i != 0) { - retval += " "; - } - if (tok.kind == 0) { - retval += tokenImage[0]; - break; - } - retval += add_escapes(tok.image); - tok = tok.next; - } - retval += "\" at line " + currentToken.next.beginLine + ", column " - + currentToken.next.beginColumn + "." + eol; - if (expectedTokenSequences.length == 1) { - retval += "Was expecting:" + eol + " "; - } else { - retval += "Was expecting one of:" + eol + " "; - } - retval += expected; - return retval; - } - - /** - * The end of line string for this machine. - */ - protected String eol = System.getProperty("line.separator", "\n"); - - /** - * Used to convert raw characters to their escaped version when these raw - * version cannot be used as part of an ASCII string literal. - */ - protected String add_escapes(String str) { - StringBuffer retval = new StringBuffer(); - char ch; - for (int i = 0; i < str.length(); i++) { - switch (str.charAt(i)) { - case 0: - continue; - case '\b': - retval.append("\\b"); - continue; - case '\t': - retval.append("\\t"); - continue; - case '\n': - retval.append("\\n"); - continue; - case '\f': - retval.append("\\f"); - continue; - case '\r': - retval.append("\\r"); - continue; - case '\"': - retval.append("\\\""); - continue; - case '\'': - retval.append("\\\'"); - continue; - case '\\': - retval.append("\\\\"); - continue; - default: - if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { - String s = "0000" + Integer.toString(ch, 16); - retval.append("\\u" - + s.substring(s.length() - 4, s.length())); - } else { - retval.append(ch); - } - continue; - } - } - return retval.toString(); - } - -} diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java index e66925ae2d..53d1ee78ca 100644 --- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java @@ -13,34 +13,8611 @@ * License for the specific language governing permissions and limitations under * the License. */ +/* Generated By:JavaCC: Do not edit this line. Parser.java */ package com.vaadin.sass.internal.parser; +import java.io.BufferedInputStream; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.URL; +import java.util.ArrayList; +import java.util.Locale; +import java.util.UUID; + +import org.w3c.css.sac.CSSException; +import org.w3c.css.sac.CSSParseException; +import org.w3c.css.sac.ConditionFactory; +import org.w3c.css.sac.DocumentHandler; +import org.w3c.css.sac.ErrorHandler; import org.w3c.css.sac.InputSource; +import org.w3c.css.sac.LexicalUnit; +import org.w3c.css.sac.Locator; +import org.w3c.css.sac.SelectorFactory; +import org.w3c.css.sac.SelectorList; +import org.w3c.flute.parser.selectors.ConditionFactoryImpl; +import org.w3c.flute.parser.selectors.SelectorFactoryImpl; +import org.w3c.flute.util.Encoding; + +import com.vaadin.sass.internal.handler.SCSSDocumentHandlerImpl; +import com.vaadin.sass.internal.tree.Node; +import com.vaadin.sass.internal.tree.VariableNode; /** + * A CSS2 parser * - * @since - * @author Vaadin Ltd + * @author Philippe Le H�garet + * @version $Revision: 1.15 $ */ -public interface Parser extends org.w3c.css.sac.Parser { +public class Parser implements org.w3c.css.sac.Parser, ParserConstants { + + // replaces all \t, \n, etc with this StringBuffer. + static final StringBuilder SPACE = new StringBuilder(" "); + + // the document handler for the parser + protected SCSSDocumentHandlerImpl documentHandler; + // the error handler for the parser + protected ErrorHandler errorHandler; + // the input source for the parser + protected InputSource source; + + protected ConditionFactory conditionFactory; + protected SelectorFactory selectorFactory; + + // temporary place holder for pseudo-element ... + private String pseudoElt; + + /** + * Creates a new Parser + */ + public Parser() { + this((CharStream) null); + } + + /** + * @@TODO + * @exception CSSException + * Not yet implemented + */ + @Override + public void setLocale(Locale locale) throws CSSException { + throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR); + } + + public InputSource getInputSource() { + return source; + } + + /** + * Set the document handler for this parser + */ + @Override + public void setDocumentHandler(DocumentHandler handler) { + documentHandler = (SCSSDocumentHandlerImpl) handler; + } + + @Override + public void setSelectorFactory(SelectorFactory selectorFactory) { + this.selectorFactory = selectorFactory; + } + + @Override + public void setConditionFactory(ConditionFactory conditionFactory) { + this.conditionFactory = conditionFactory; + } + + /** + * Set the error handler for this parser + */ + @Override + public void setErrorHandler(ErrorHandler error) { + errorHandler = error; + } + + /** + * Main parse methods + * + * @param source + * the source of the style sheet. + * @exception IOException + * the source can't be parsed. + * @exception CSSException + * the source is not CSS valid. + */ + @Override + public void parseStyleSheet(InputSource source) throws CSSException, + IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + + parserUnit(); + } + + /** + * Convenient method for URIs. + * + * @param systemId + * the fully resolved URI of the style sheet. + * @exception IOException + * the source can't be parsed. + * @exception CSSException + * the source is not CSS valid. + */ + @Override + public void parseStyleSheet(String systemId) throws CSSException, + IOException { + parseStyleSheet(new InputSource(systemId)); + } + + /** + * This method parses only one rule (style rule or at-rule, except + * @charset). + * + * @param source + * the source of the rule. + * @exception IOException + * the source can't be parsed. + * @exception CSSException + * the source is not CSS valid. + */ + // TODO required by original parser but not used by Vaadin? + @Override + public void parseRule(InputSource source) throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + _parseRule(); + } - InputSource getInputSource(); + /** + * This method parses a style declaration (including the surrounding curly + * braces). + * + * @param source + * the source of the style declaration. + * @exception IOException + * the source can't be parsed. + * @exception CSSException + * the source is not CSS valid. + */ + @Override + public void parseStyleDeclaration(InputSource source) throws CSSException, + IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); - class ParserAccessor { + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + _parseDeclarationBlock(); + } + + /** + * This methods returns "http://www.w3.org/TR/REC-CSS2". + * + * @return the string "http://www.w3.org/TR/REC-CSS2". + */ + @Override + public String getParserVersion() { + return "http://www.w3.org/TR/REC-CSS2"; + } + + /** + * Parse methods used by DOM Level 2 implementation. + */ + public void parseImportRule(InputSource source) throws CSSException, + IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + _parseImportRule(); + } + + public void parseMediaRule(InputSource source) throws CSSException, + IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + _parseMediaRule(); + } + + @Override + public SelectorList parseSelectors(InputSource source) throws CSSException, + IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); - public static Parser getParser() { + return null; + } + + @Override + public LexicalUnit parsePropertyValue(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + return expr(); + } + + @Override + public boolean parsePriority(InputSource source) throws CSSException, + IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + return prio(); + } + + /** + * Convert the source into a Reader. Used only by DOM Level 2 parser + * methods. + */ + private Reader getReader(InputSource source) throws IOException { + if (source.getCharacterStream() != null) { + return source.getCharacterStream(); + } else if (source.getByteStream() != null) { + // My DOM level 2 implementation doesn't use this case. + if (source.getEncoding() == null) { + // unknown encoding, use ASCII as default. + return new InputStreamReader(source.getByteStream(), "ASCII"); + } else { + return new InputStreamReader(source.getByteStream(), + source.getEncoding()); + } + } else { + // systemId + // @@TODO + throw new CSSException("not yet implemented"); + } + } + + /** + * Convert the source into a CharStream with encoding informations. The + * encoding can be found in the InputSource or in the CSS document. Since + * this method marks the reader and make a reset after looking for the + * charset declaration, you'll find the charset declaration into the stream. + */ + private CharStream getCharStreamWithLurk(InputSource source) + throws CSSException, IOException { + if (source.getCharacterStream() != null) { + // all encoding are supposed to be resolved by the user + // return the reader + return new Generic_CharStream(source.getCharacterStream(), 1, 1); + } else if (source.getByteStream() == null) { + // @@CONTINUE ME. see also getReader() with systemId try { - String implClassName = Parser.class.getPackage().getName() - + ".ParserImpl"; - Class clazz = Class.forName(implClassName); - return (Parser) clazz.newInstance(); + source.setByteStream(new URL(source.getURI()).openStream()); } catch (Exception e) { - throw new RuntimeException( - "Unable to load parser implementation." - + "Check whether you have generated parser " - + "class using build procedure", e); + try { + source.setByteStream(new FileInputStream(source.getURI())); + } catch (IOException ex) { + throw new CSSException("invalid url ?"); + } + } + } + // use UTF-8 as the default encoding. + String encoding = source.getEncoding(); + InputStream input = source.getByteStream(); + if (!input.markSupported()) { + // If mark is not supported, wrap it in a stream which supports mark + input = new BufferedInputStream(input); + source.setByteStream(input); + } + // Mark either the original stream or the wrapped stream + input.mark(100); + if (encoding == null) { + encoding = "ASCII"; + + char c = ' '; + + c = (char) input.read(); + + if (c == '@') { + // hum, is it a charset ? + int size = 100; + byte[] buf = new byte[size]; + input.read(buf, 0, 7); + String keyword = new String(buf, 0, 7); + if (keyword.equals("charset")) { + // Yes, this is the charset declaration ! + + // here I don't use the right declaration : white space are + // ' '. + while ((c = (char) input.read()) == ' ') { + // find the first quote + } + char endChar = c; + int i = 0; + + if ((endChar != '"') && (endChar != '\u005c'')) { + // hum this is not a quote. + throw new CSSException("invalid charset declaration"); + } + + while ((c = (char) input.read()) != endChar) { + buf[i++] = (byte) c; + if (i == size) { + byte[] old = buf; + buf = new byte[size + 100]; + System.arraycopy(old, 0, buf, 0, size); + size += 100; + } + } + while ((c = (char) input.read()) == ' ') { + // find the next relevant character + } + if (c != ';') { + // no semi colon at the end ? + throw new CSSException("invalid charset declaration: " + + "missing semi colon"); + } + encoding = new String(buf, 0, i); + if (source.getEncoding() != null) { + // compare the two encoding informations. + // For example, I don't accept to have ASCII and after + // UTF-8. + // Is it really good ? That is the question. + if (!encoding.equals(source.getEncoding())) { + throw new CSSException( + "invalid encoding information."); + } + } + } // else no charset declaration available + } + } + // ok set the real encoding of this source. + source.setEncoding(encoding); + // set the real reader of this source. + source.setCharacterStream(new InputStreamReader(source.getByteStream(), + Encoding.getJavaEncoding(encoding))); + // reset the stream (leave the charset declaration in the stream). + input.reset(); + + return new Generic_CharStream(source.getCharacterStream(), 1, 1); + } + + private LocatorImpl currentLocator; + + private Locator getLocator() { + if (currentLocator == null) { + currentLocator = new LocatorImpl(this); + return currentLocator; + } + return currentLocator.reInit(this); + } + + private LocatorImpl getLocator(Token save) { + if (currentLocator == null) { + currentLocator = new LocatorImpl(this, save); + return currentLocator; + } + return currentLocator.reInit(this, save); + } + + private void reportError(Locator l, Exception e) { + if (errorHandler != null) { + if (e instanceof ParseException) { + // construct a clean error message. + ParseException pe = (ParseException) e; + if (pe.specialConstructor) { + StringBuffer errorM = new StringBuffer(); + if (pe.currentToken != null) { + errorM.append("encountered \u005c"").append( + pe.currentToken.next); + } + errorM.append('"'); + if (pe.expectedTokenSequences.length != 0) { + errorM.append(". Was expecting one of: "); + for (int i = 0; i < pe.expectedTokenSequences.length; i++) { + for (int j = 0; j < pe.expectedTokenSequences[i].length; j++) { + int kind = pe.expectedTokenSequences[i][j]; + if (kind != S) { + errorM.append(pe.tokenImage[kind]); + errorM.append(' '); + } + } + } + } + errorHandler.error(new CSSParseException(errorM.toString(), + l, e)); + } else { + errorHandler.error(new CSSParseException(e.getMessage(), l, + e)); + } + } else if (e == null) { + errorHandler.error(new CSSParseException("error", l, null)); + } else { + errorHandler.error(new CSSParseException(e.getMessage(), l, e)); + } + } + } + + private void reportWarningSkipText(Locator l, String text) { + if (errorHandler != null && text != null) { + errorHandler.warning(new CSSParseException("Skipping: " + text, l)); + } + } + + /* + * The grammar of CSS2 + */ + + /** + * The main entry for the parser. + * + * @exception ParseException + * exception during the parse + */ + final public void parserUnit() throws ParseException { + try { + documentHandler.startDocument(source); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case CHARSET_SYM: + charset(); + break; + default: + jj_la1[0] = jj_gen; + ; + } + label_1: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + case CDO: + case CDC: + case ATKEYWORD: + ; + break; + default: + jj_la1[1] = jj_gen; + break label_1; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + jj_consume_token(S); + comments(); + break; + case CDO: + case CDC: + case ATKEYWORD: + ignoreStatement(); + break; + default: + jj_la1[2] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + label_2: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IMPORT_SYM: + ; + break; + default: + jj_la1[3] = jj_gen; + break label_2; + } + importDeclaration(); + label_3: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case CDO: + case CDC: + case ATKEYWORD: + ; + break; + default: + jj_la1[4] = jj_gen; + break label_3; + } + ignoreStatement(); + label_4: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[5] = jj_gen; + break label_4; + } + jj_consume_token(S); + } + } + } + afterImportDeclaration(); + jj_consume_token(0); + } finally { + documentHandler.endDocument(source); + } + } + + final public void charset() throws ParseException { + Token n; + try { + jj_consume_token(CHARSET_SYM); + label_5: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[6] = jj_gen; + break label_5; + } + jj_consume_token(S); + } + n = jj_consume_token(STRING); + label_6: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[7] = jj_gen; + break label_6; + } + jj_consume_token(S); + } + jj_consume_token(SEMICOLON); + } catch (ParseException e) { + reportError(getLocator(e.currentToken.next), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + + } catch (Exception e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + + } + } + + final public void afterImportDeclaration() throws ParseException { + String ret; + Locator l; + label_7: while (true) { + ; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case DEBUG_SYM: + case WARN_SYM: + debuggingDirective(); + break; + case MIXIN_SYM: + mixinDirective(); + break; + case EACH_SYM: + case IF_SYM: + controlDirective(); + break; + case INCLUDE_SYM: + includeDirective(); + break; + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case IDENT: + case HASH: + styleRule(); + break; + case MEDIA_SYM: + media(); + break; + case PAGE_SYM: + page(); + break; + case FONT_FACE_SYM: + fontFace(); + break; + case KEY_FRAME_SYM: + keyframes(); + break; + default: + jj_la1[8] = jj_gen; + if (jj_2_1(2147483647)) { + variable(); + } else { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case VARIABLE: + listModifyDirective(); + break; + default: + jj_la1[9] = jj_gen; + l = getLocator(); + ret = skipStatement(); + if ((ret == null) || (ret.length() == 0)) { + { + if (true) { + return; + } + } + } + if (ret.charAt(0) == '@') { + documentHandler.unrecognizedRule(ret); + } else { + reportWarningSkipText(l, ret); + } + } + } + } + label_8: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case CDO: + case CDC: + case ATKEYWORD: + ; + break; + default: + jj_la1[10] = jj_gen; + break label_8; + } + ignoreStatement(); + label_9: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[11] = jj_gen; + break label_9; + } + jj_consume_token(S); + } + } + } + } + + final public void ignoreStatement() throws ParseException { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case CDO: + jj_consume_token(CDO); + break; + case CDC: + jj_consume_token(CDC); + break; + case ATKEYWORD: + atRuleDeclaration(); + break; + default: + jj_la1[12] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + + /** + * The import statement + * + * @exception ParseException + * exception during the parse + */ + final public void importDeclaration() throws ParseException { + Token n; + String uri; + MediaListImpl ml = new MediaListImpl(); + boolean isURL = false; + try { + jj_consume_token(IMPORT_SYM); + label_10: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[13] = jj_gen; + break label_10; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case STRING: + n = jj_consume_token(STRING); + uri = convertStringIndex(n.image, 1, n.image.length() - 1); + break; + case URL: + n = jj_consume_token(URL); + isURL = true; + uri = n.image.substring(4, n.image.length() - 1).trim(); + if ((uri.charAt(0) == '"') || (uri.charAt(0) == '\u005c'')) { + uri = uri.substring(1, uri.length() - 1); + } + break; + default: + jj_la1[14] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_11: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[15] = jj_gen; + break label_11; + } + jj_consume_token(S); + } + mediaStatement(ml); + jj_consume_token(SEMICOLON); + label_12: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[16] = jj_gen; + break label_12; + } + jj_consume_token(S); + } + if (ml.getLength() == 0) { + // see section 6.3 of the CSS2 recommandation. + ml.addItem("all"); + } + documentHandler.importStyle(uri, ml, isURL); + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void keyframes() throws ParseException { + Token n; + boolean start = false; + String keyframeName = null; + String animationname = ""; + try { + n = jj_consume_token(KEY_FRAME_SYM); + label_13: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[17] = jj_gen; + break label_13; + } + jj_consume_token(S); + } + keyframeName = n.image; + label_14: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + n = jj_consume_token(IDENT); + animationname += n.image; + break; + case INTERPOLATION: + n = jj_consume_token(INTERPOLATION); + animationname += n.image; + break; + default: + jj_la1[18] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + ; + break; + default: + jj_la1[19] = jj_gen; + break label_14; + } + } + label_15: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[20] = jj_gen; + break label_15; + } + jj_consume_token(S); + } + start = true; + documentHandler.startKeyFrames(keyframeName, animationname); + jj_consume_token(LBRACE); + label_16: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[21] = jj_gen; + break label_16; + } + jj_consume_token(S); + } + label_17: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case TO: + case FROM: + case CONTENT_SYM: + case PERCENTAGE: + ; + break; + default: + jj_la1[22] = jj_gen; + break label_17; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case TO: + case FROM: + case PERCENTAGE: + keyframeSelector(); + break; + case CONTENT_SYM: + contentDirective(); + break; + default: + jj_la1[23] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(RBRACE); + label_18: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[24] = jj_gen; + break label_18; + } + jj_consume_token(S); + } + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + } finally { + if (start) { + documentHandler.endKeyFrames(); + } + } + } + + final public void keyframeSelector() throws ParseException { + Token n; + String selector = ""; + boolean start = false; + try { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case FROM: + n = jj_consume_token(FROM); + break; + case TO: + n = jj_consume_token(TO); + break; + case PERCENTAGE: + n = jj_consume_token(PERCENTAGE); + break; + default: + jj_la1[25] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + selector += n.image; + label_19: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[26] = jj_gen; + break label_19; + } + jj_consume_token(S); + } + label_20: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[27] = jj_gen; + break label_20; + } + jj_consume_token(COMMA); + label_21: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[28] = jj_gen; + break label_21; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case FROM: + n = jj_consume_token(FROM); + break; + case TO: + n = jj_consume_token(TO); + break; + case PERCENTAGE: + n = jj_consume_token(PERCENTAGE); + break; + default: + jj_la1[29] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + selector += (", " + n.image); + label_22: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[30] = jj_gen; + break label_22; + } + jj_consume_token(S); + } + } + jj_consume_token(LBRACE); + label_23: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[31] = jj_gen; + break label_23; + } + jj_consume_token(S); + } + start = true; + documentHandler.startKeyframeSelector(selector); + label_24: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case MICROSOFT_RULE: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ; + break; + default: + jj_la1[32] = jj_gen; + break label_24; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ifContentStatement(); + break; + case MICROSOFT_RULE: + microsoftExtension(); + break; + default: + jj_la1[33] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(RBRACE); + label_25: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[34] = jj_gen; + break label_25; + } + jj_consume_token(S); + } + } catch (ThrowedParseException e) { + if (errorHandler != null) { + LocatorImpl li = new LocatorImpl(this, + e.e.currentToken.next.beginLine, + e.e.currentToken.next.beginColumn - 1); + reportError(li, e.e); + } + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + + } catch (TokenMgrError e) { + reportWarningSkipText(getLocator(), skipStatement()); + } finally { + if (start) { + documentHandler.endKeyframeSelector(); + } + } + } + + /** + * @exception ParseException + * exception during the parse + */ + /* see http://www.w3.org/TR/css3-mediaqueries/ */ + final public void media() throws ParseException { + boolean start = false; + String ret; + MediaListImpl ml = new MediaListImpl(); + try { + jj_consume_token(MEDIA_SYM); + label_26: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[35] = jj_gen; + break label_26; + } + jj_consume_token(S); + } + mediaStatement(ml); + start = true; + documentHandler.startMedia(ml); + jj_consume_token(LBRACE); + label_27: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[36] = jj_gen; + break label_27; + } + jj_consume_token(S); + } + label_28: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case CDO: + case LBRACE: + case DASHMATCH: + case INCLUDES: + case PLUS: + case MINUS: + case COMMA: + case SEMICOLON: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case NONASCII: + case DEBUG_SYM: + case WARN_SYM: + case STRING: + case IDENT: + case NUMBER: + case URL: + case PERCENTAGE: + case HASH: + case IMPORT_SYM: + case MEDIA_SYM: + case CHARSET_SYM: + case PAGE_SYM: + case FONT_FACE_SYM: + case ATKEYWORD: + case IMPORTANT_SYM: + case UNICODERANGE: + case FUNCTION: + case UNKNOWN: + ; + break; + default: + jj_la1[37] = jj_gen; + break label_28; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case DEBUG_SYM: + case WARN_SYM: + debuggingDirective(); + break; + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case IDENT: + case HASH: + styleRule(); + break; + case CDO: + case LBRACE: + case DASHMATCH: + case INCLUDES: + case MINUS: + case COMMA: + case SEMICOLON: + case NONASCII: + case STRING: + case NUMBER: + case URL: + case PERCENTAGE: + case IMPORT_SYM: + case MEDIA_SYM: + case CHARSET_SYM: + case PAGE_SYM: + case FONT_FACE_SYM: + case ATKEYWORD: + case IMPORTANT_SYM: + case UNICODERANGE: + case FUNCTION: + case UNKNOWN: + skipUnknownRule(); + break; + default: + jj_la1[38] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(RBRACE); + label_29: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[39] = jj_gen; + break label_29; + } + jj_consume_token(S); + } + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + + } finally { + if (start) { + documentHandler.endMedia(ml); + } + } + } + + final public void mediaStatement(MediaListImpl ml) throws ParseException { + Token t; + t = getToken(1); + // loop over comma separated parts, add each to ml + while ((t.kind != LBRACE) && (t.kind != EOF) && (t.kind != SEMICOLON)) { + StringBuffer s = new StringBuffer(); + s.append(getToken(0).image); + while ((t.kind != COMMA) && (t.kind != LBRACE) && (t.kind != EOF) + && (t.kind != SEMICOLON)) { + s.append(t.image); + getNextToken(); + t = getToken(1); + } + if (t.kind == COMMA) { + // skip the comma and the token before it that is still the + // active token + getNextToken(); + getNextToken(); + t = getToken(1); + } + String str = s.toString().trim(); + if (str.length() > 0) { + ml.addItem(str); + } + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String medium() throws ParseException { + Token n; + n = jj_consume_token(IDENT); + { + if (true) { + return convertIdent(n.image); + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void page() throws ParseException { + boolean start = false; + Token n = null; + String page = null; + String pseudo = null; + try { + jj_consume_token(PAGE_SYM); + label_30: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[40] = jj_gen; + break label_30; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + n = jj_consume_token(IDENT); + label_31: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[41] = jj_gen; + break label_31; + } + jj_consume_token(S); + } + break; + default: + jj_la1[42] = jj_gen; + ; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COLON: + pseudo = pseudo_page(); + break; + default: + jj_la1[43] = jj_gen; + ; + } + if (n != null) { + page = convertIdent(n.image); + } + jj_consume_token(LBRACE); + label_32: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[44] = jj_gen; + break label_32; + } + jj_consume_token(S); + } + start = true; + documentHandler.startPage(page, pseudo); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[45] = jj_gen; + ; + } + label_33: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[46] = jj_gen; + break label_33; + } + jj_consume_token(SEMICOLON); + label_34: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[47] = jj_gen; + break label_34; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[48] = jj_gen; + ; + } + } + jj_consume_token(RBRACE); + label_35: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[49] = jj_gen; + break label_35; + } + jj_consume_token(S); + } + } catch (ParseException e) { + if (errorHandler != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn - 1); + reportError(li, e); + skipStatement(); + // reportWarningSkipText(li, skipStatement()); + } else { + skipStatement(); + } + } finally { + if (start) { + documentHandler.endPage(page, pseudo); + } + } + } + + final public String pseudo_page() throws ParseException { + Token n; + jj_consume_token(COLON); + n = jj_consume_token(IDENT); + label_36: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[50] = jj_gen; + break label_36; + } + jj_consume_token(S); + } + { + if (true) { + return convertIdent(n.image); + } + } + throw new Error("Missing return statement in function"); + } + + final public void fontFace() throws ParseException { + boolean start = false; + try { + jj_consume_token(FONT_FACE_SYM); + label_37: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[51] = jj_gen; + break label_37; + } + jj_consume_token(S); + } + jj_consume_token(LBRACE); + label_38: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[52] = jj_gen; + break label_38; + } + jj_consume_token(S); + } + start = true; + documentHandler.startFontFace(); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[53] = jj_gen; + ; + } + label_39: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[54] = jj_gen; + break label_39; + } + jj_consume_token(SEMICOLON); + label_40: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[55] = jj_gen; + break label_40; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[56] = jj_gen; + ; + } + } + jj_consume_token(RBRACE); + label_41: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[57] = jj_gen; + break label_41; + } + jj_consume_token(S); + } + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + + } finally { + if (start) { + documentHandler.endFontFace(); + } + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void atRuleDeclaration() throws ParseException { + Token n; + String ret; + n = jj_consume_token(ATKEYWORD); + ret = skipStatement(); + if ((ret != null) && (ret.charAt(0) == '@')) { + documentHandler.unrecognizedRule(ret); + } else { + reportWarningSkipText(getLocator(), ret); + } + } + + final public void skipUnknownRule() throws ParseException { + Token n; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case ATKEYWORD: + n = jj_consume_token(ATKEYWORD); + break; + case CDO: + n = jj_consume_token(CDO); + break; + case CHARSET_SYM: + n = jj_consume_token(CHARSET_SYM); + break; + case COMMA: + n = jj_consume_token(COMMA); + break; + case DASHMATCH: + n = jj_consume_token(DASHMATCH); + break; + case FONT_FACE_SYM: + n = jj_consume_token(FONT_FACE_SYM); + break; + case FUNCTION: + n = jj_consume_token(FUNCTION); + break; + case IMPORTANT_SYM: + n = jj_consume_token(IMPORTANT_SYM); + break; + case IMPORT_SYM: + n = jj_consume_token(IMPORT_SYM); + break; + case INCLUDES: + n = jj_consume_token(INCLUDES); + break; + case LBRACE: + n = jj_consume_token(LBRACE); + break; + case MEDIA_SYM: + n = jj_consume_token(MEDIA_SYM); + break; + case NONASCII: + n = jj_consume_token(NONASCII); + break; + case NUMBER: + n = jj_consume_token(NUMBER); + break; + case PAGE_SYM: + n = jj_consume_token(PAGE_SYM); + break; + case PERCENTAGE: + n = jj_consume_token(PERCENTAGE); + break; + case STRING: + n = jj_consume_token(STRING); + break; + case UNICODERANGE: + n = jj_consume_token(UNICODERANGE); + break; + case URL: + n = jj_consume_token(URL); + break; + case SEMICOLON: + n = jj_consume_token(SEMICOLON); + break; + case MINUS: + n = jj_consume_token(MINUS); + break; + case UNKNOWN: + n = jj_consume_token(UNKNOWN); + break; + default: + jj_la1[58] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + String ret; + Locator loc = getLocator(); + ret = skipStatement(); + if ((ret != null) && (n.image.charAt(0) == '@')) { + documentHandler.unrecognizedRule(ret); + } else { + reportWarningSkipText(loc, ret); + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public char combinator() throws ParseException { + char connector = ' '; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + connector = combinatorChar(); + break; + case S: + jj_consume_token(S); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + connector = combinatorChar(); + break; + default: + jj_la1[59] = jj_gen; + ; + } + break; + default: + jj_la1[60] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + { + if (true) { + return connector; + } + } + throw new Error("Missing return statement in function"); + } + + /** to refactor combinator and reuse in selector(). */ + final public char combinatorChar() throws ParseException { + Token t; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + t = jj_consume_token(PLUS); + break; + case PRECEDES: + t = jj_consume_token(PRECEDES); + break; + case SIBLING: + t = jj_consume_token(SIBLING); + break; + default: + jj_la1[61] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_42: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[62] = jj_gen; + break label_42; + } + jj_consume_token(S); + } + { + if (true) { + return t.image.charAt(0); + } + } + throw new Error("Missing return statement in function"); + } + + final public void microsoftExtension() throws ParseException { + Token n; + String name = ""; + String value = ""; + // This is not really taking the syntax of filter rules into account + n = jj_consume_token(MICROSOFT_RULE); + label_43: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[63] = jj_gen; + break label_43; + } + jj_consume_token(S); + } + name = n.image; + jj_consume_token(COLON); + label_44: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + n = jj_consume_token(IDENT); + value += n.image; + break; + case NUMBER: + n = jj_consume_token(NUMBER); + value += n.image; + break; + case STRING: + n = jj_consume_token(STRING); + value += n.image; + break; + case COMMA: + n = jj_consume_token(COMMA); + value += n.image; + break; + case INTERPOLATION: + n = jj_consume_token(INTERPOLATION); + value += n.image; + break; + case COLON: + n = jj_consume_token(COLON); + value += n.image; + break; + case FUNCTION: + n = jj_consume_token(FUNCTION); + value += n.image; + break; + case RPARAN: + n = jj_consume_token(RPARAN); + value += n.image; + break; + case EQ: + n = jj_consume_token(EQ); + value += n.image; + break; + case DOT: + n = jj_consume_token(DOT); + value += n.image; + break; + case S: + n = jj_consume_token(S); + if (value.lastIndexOf(' ') != value.length() - 1) { + value += n.image; + } + break; + default: + jj_la1[64] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + case EQ: + case COMMA: + case DOT: + case RPARAN: + case COLON: + case INTERPOLATION: + case STRING: + case IDENT: + case NUMBER: + case FUNCTION: + ; + break; + default: + jj_la1[65] = jj_gen; + break label_44; + } + } + jj_consume_token(SEMICOLON); + label_45: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[66] = jj_gen; + break label_45; + } + jj_consume_token(S); + } + documentHandler.microsoftDirective(name, value); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String property() throws ParseException { + Token t; + String s = ""; + label_46: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + t = jj_consume_token(IDENT); + s += t.image; + break; + case INTERPOLATION: + t = jj_consume_token(INTERPOLATION); + s += t.image; + break; + default: + jj_la1[67] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + ; + break; + default: + jj_la1[68] = jj_gen; + break label_46; + } + } + label_47: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[69] = jj_gen; + break label_47; + } + jj_consume_token(S); + } + { + if (true) { + return s; + } + } + throw new Error("Missing return statement in function"); + } + + final public String variableName() throws ParseException { + Token n; + n = jj_consume_token(VARIABLE); + label_48: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[70] = jj_gen; + break label_48; + } + jj_consume_token(S); + } + { + if (true) { + return convertIdent(n.image.substring(1)); + } + } + throw new Error("Missing return statement in function"); + } + + final public String functionName() throws ParseException { + Token n; + n = jj_consume_token(FUNCTION); + label_49: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[71] = jj_gen; + break label_49; + } + jj_consume_token(S); + } + { + if (true) { + return convertIdent(n.image.substring(0, n.image.length() - 1)); + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void styleRule() throws ParseException { + boolean start = false; + ArrayList l = null; + Token save; + Locator loc; + try { + l = selectorList(); + save = token; + jj_consume_token(LBRACE); + label_50: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[72] = jj_gen; + break label_50; + } + jj_consume_token(S); + } + start = true; + documentHandler.startSelector(l); + label_51: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case MICROSOFT_RULE: + case IDENT: + case VARIABLE: + case HASH: + case IMPORT_SYM: + case MEDIA_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ; + break; + default: + jj_la1[73] = jj_gen; + break label_51; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ifContentStatement(); + break; + case MICROSOFT_RULE: + microsoftExtension(); + break; + case IMPORT_SYM: + importDeclaration(); + break; + default: + jj_la1[74] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(RBRACE); + label_52: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[75] = jj_gen; + break label_52; + } + jj_consume_token(S); + } + } catch (ThrowedParseException e) { + if (errorHandler != null) { + LocatorImpl li = new LocatorImpl(this, + e.e.currentToken.next.beginLine, + e.e.currentToken.next.beginColumn - 1); + reportError(li, e.e); + } + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + + } catch (TokenMgrError e) { + reportWarningSkipText(getLocator(), skipStatement()); + } finally { + if (start) { + documentHandler.endSelector(); } } + } + final public ArrayList selectorList() throws ParseException { + ArrayList selectors = new ArrayList(); + String selector; + selector = selector(); + label_53: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[76] = jj_gen; + break label_53; + } + jj_consume_token(COMMA); + label_54: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[77] = jj_gen; + break label_54; + } + jj_consume_token(S); + } + selectors.add(selector); + selector = selector(); + } + selectors.add(selector); + { + if (true) { + return selectors; + } + } + throw new Error("Missing return statement in function"); } + + /** + * @exception ParseException + * exception during the parse + */ + final public String selector() throws ParseException { + String selector = null; + char comb; + try { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case IDENT: + case HASH: + selector = simple_selector(null, ' '); + break; + case PLUS: + case PRECEDES: + case SIBLING: + comb = combinatorChar(); + selector = simple_selector(selector, comb); + break; + default: + jj_la1[78] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_55: while (true) { + if (jj_2_2(2)) { + ; + } else { + break label_55; + } + comb = combinator(); + selector = simple_selector(selector, comb); + } + label_56: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[79] = jj_gen; + break label_56; + } + jj_consume_token(S); + } + { + if (true) { + return selector; + } + } + } catch (ParseException e) { + /* + * Token t = getToken(1); StringBuffer s = new StringBuffer(); + * s.append(getToken(0).image); while ((t.kind != COMMA) && (t.kind + * != SEMICOLON) && (t.kind != LBRACE) && (t.kind != EOF)) { + * s.append(t.image); getNextToken(); t = getToken(1); } + * reportWarningSkipText(getLocator(), s.toString()); + */ + Token t = getToken(1); + while ((t.kind != COMMA) && (t.kind != SEMICOLON) + && (t.kind != LBRACE) && (t.kind != EOF)) { + getNextToken(); + t = getToken(1); + } + + { + if (true) { + throw new ThrowedParseException(e); + } + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String simple_selector(String selector, char comb) + throws ParseException { + String simple_current = null; + String cond = null; + + pseudoElt = null; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case ANY: + case PARENT: + case INTERPOLATION: + case IDENT: + simple_current = element_name(); + label_57: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case LBRACKET: + case DOT: + case COLON: + case HASH: + ; + break; + default: + jj_la1[80] = jj_gen; + break label_57; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case HASH: + cond = hash(cond); + break; + case DOT: + cond = _class(cond); + break; + case LBRACKET: + cond = attrib(cond); + break; + case COLON: + cond = pseudo(cond); + break; + default: + jj_la1[81] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + break; + case LBRACKET: + case DOT: + case COLON: + case HASH: + label_58: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case HASH: + cond = hash(cond); + break; + case DOT: + cond = _class(cond); + break; + case LBRACKET: + cond = attrib(cond); + break; + case COLON: + cond = pseudo(cond); + break; + default: + jj_la1[82] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case LBRACKET: + case DOT: + case COLON: + case HASH: + ; + break; + default: + jj_la1[83] = jj_gen; + break label_58; + } + } + break; + default: + jj_la1[84] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + if (simple_current == null) { + simple_current = ""; + } + if (cond != null) { + simple_current = simple_current + cond; + } + StringBuilder builder = new StringBuilder(); + switch (comb) { + case ' ': + if (selector != null) { + builder.append(selector).append(" "); + } + break; + case '+': + case '>': + case '~': + if (selector != null) { + builder.append(selector).append(" "); + } + builder.append(comb).append(" "); + break; + default: { + if (true) { + throw new ParseException("invalid state. send a bug report"); + } + } + } + builder.append(simple_current); + selector = builder.toString(); + + if (pseudoElt != null) { + selector = selector + pseudoElt; + } + { + if (true) { + return selector; + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String _class(String pred) throws ParseException { + Token t; + String s = "."; + jj_consume_token(DOT); + label_59: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + t = jj_consume_token(IDENT); + s += t.image; + break; + case INTERPOLATION: + t = jj_consume_token(INTERPOLATION); + s += t.image; + break; + default: + jj_la1[85] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + ; + break; + default: + jj_la1[86] = jj_gen; + break label_59; + } + } + if (pred == null) { + { + if (true) { + return s; + } + } + } else { + { + if (true) { + return pred + s; + } + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String element_name() throws ParseException { + Token t; + String s = ""; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + label_60: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + t = jj_consume_token(IDENT); + s += t.image; + break; + case INTERPOLATION: + t = jj_consume_token(INTERPOLATION); + s += t.image; + break; + default: + jj_la1[87] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + ; + break; + default: + jj_la1[88] = jj_gen; + break label_60; + } + } + { + if (true) { + return s; + } + } + break; + case ANY: + jj_consume_token(ANY); + { + if (true) { + return "*"; + } + } + break; + case PARENT: + jj_consume_token(PARENT); + { + if (true) { + return "&"; + } + } + break; + default: + jj_la1[89] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String attrib(String pred) throws ParseException { + int cases = 0; + Token att = null; + Token val = null; + String attValue = null; + jj_consume_token(LBRACKET); + label_61: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[90] = jj_gen; + break label_61; + } + jj_consume_token(S); + } + att = jj_consume_token(IDENT); + label_62: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[91] = jj_gen; + break label_62; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case DASHMATCH: + case CARETMATCH: + case DOLLARMATCH: + case STARMATCH: + case INCLUDES: + case EQ: + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case EQ: + jj_consume_token(EQ); + cases = 1; + break; + case INCLUDES: + jj_consume_token(INCLUDES); + cases = 2; + break; + case DASHMATCH: + jj_consume_token(DASHMATCH); + cases = 3; + break; + case CARETMATCH: + jj_consume_token(CARETMATCH); + cases = 4; + break; + case DOLLARMATCH: + jj_consume_token(DOLLARMATCH); + cases = 5; + break; + case STARMATCH: + jj_consume_token(STARMATCH); + cases = 6; + break; + default: + jj_la1[92] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_63: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[93] = jj_gen; + break label_63; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + val = jj_consume_token(IDENT); + attValue = val.image; + break; + case STRING: + val = jj_consume_token(STRING); + attValue = val.image; + break; + default: + jj_la1[94] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_64: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[95] = jj_gen; + break label_64; + } + jj_consume_token(S); + } + break; + default: + jj_la1[96] = jj_gen; + ; + } + jj_consume_token(RBRACKET); + String name = convertIdent(att.image); + String c; + switch (cases) { + case 0: + c = name; + break; + case 1: + c = name + "=" + attValue; + break; + case 2: + c = name + "~=" + attValue; + break; + case 3: + c = name + "|=" + attValue; + break; + case 4: + c = name + "^=" + attValue; + break; + case 5: + c = name + "$=" + attValue; + break; + case 6: + c = name + "*=" + attValue; + break; + default: + // never reached. + c = null; + } + c = "[" + c + "]"; + if (pred == null) { + { + if (true) { + return c; + } + } + } else { + { + if (true) { + return pred + c; + } + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String pseudo(String pred) throws ParseException { + Token n; + Token param; + String d; + boolean isPseudoElement = false; + jj_consume_token(COLON); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COLON: + jj_consume_token(COLON); + isPseudoElement = true; + break; + default: + jj_la1[97] = jj_gen; + ; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + n = jj_consume_token(IDENT); + String s = ":" + convertIdent(n.image); + if (isPseudoElement) { + if (pseudoElt != null) { + { + if (true) { + throw new CSSParseException( + "duplicate pseudo element definition " + s, + getLocator()); + } + } + } else { + pseudoElt = ":" + s; + { + if (true) { + return pred; + } + } + } + } else { + String c = s; + if (pred == null) { + { + if (true) { + return c; + } + } + } else { + { + if (true) { + return pred + c; + } + } + } + } + break; + case FUNCTION: + n = jj_consume_token(FUNCTION); + label_65: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[98] = jj_gen; + break label_65; + } + jj_consume_token(S); + } + d = skipStatementUntilMatchingRightParan(); + jj_consume_token(RPARAN); + // accept anything between function and a right parenthesis + String f = convertIdent(n.image); + String colons = isPseudoElement ? "::" : ":"; + String pseudofn = colons + f + d + ")"; + if (pred == null) { + { + if (true) { + return pseudofn; + } + } + } else { + { + if (true) { + return pred + pseudofn; + } + } + } + break; + default: + jj_la1[99] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String hash(String pred) throws ParseException { + Token n; + n = jj_consume_token(HASH); + String d = n.image; + if (pred == null) { + { + if (true) { + return d; + } + } + } else { + { + if (true) { + return pred + d; + } + } + } + throw new Error("Missing return statement in function"); + } + + final public void variable() throws ParseException { + String name; + LexicalUnitImpl exp = null; + boolean guarded = false; + String raw; + try { + name = variableName(); + jj_consume_token(COLON); + label_66: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[100] = jj_gen; + break label_66; + } + jj_consume_token(S); + } + exp = expr(); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case GUARDED_SYM: + guarded = guarded(); + break; + default: + jj_la1[101] = jj_gen; + ; + } + label_67: while (true) { + jj_consume_token(SEMICOLON); + label_68: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[102] = jj_gen; + break label_68; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[103] = jj_gen; + break label_67; + } + } + documentHandler.variable(name, exp, guarded); + } catch (JumpException e) { + skipAfterExpression(); + } catch (NumberFormatException e) { + if (errorHandler != null) { + errorHandler.error(new CSSParseException("Invalid number " + + e.getMessage(), getLocator(), e)); + } + reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (ParseException e) { + if (errorHandler != null) { + if (e.currentToken != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn - 1); + reportError(li, e); + } else { + reportError(getLocator(), e); + } + skipAfterExpression(); + } else { + skipAfterExpression(); + } + } + } + + final public void controlDirective() throws ParseException { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IF_SYM: + ifDirective(); + break; + case EACH_SYM: + eachDirective(); + break; + default: + jj_la1[104] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + + final public void ifContentStatement() throws ParseException { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case CONTENT_SYM: + contentDirective(); + break; + case INCLUDE_SYM: + includeDirective(); + break; + case MEDIA_SYM: + media(); + break; + case EXTEND_SYM: + extendDirective(); + break; + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case DEBUG_SYM: + case WARN_SYM: + case IDENT: + case HASH: + styleRuleOrDeclarationOrNestedProperties(); + break; + case KEY_FRAME_SYM: + keyframes(); + break; + default: + jj_la1[105] = jj_gen; + if (jj_2_3(2147483647)) { + variable(); + } else { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case VARIABLE: + listModifyDirective(); + break; + case EACH_SYM: + case IF_SYM: + controlDirective(); + break; + case ATKEYWORD: + atRuleDeclaration(); + break; + default: + jj_la1[106] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + } + + final public void ifDirective() throws ParseException { + Token n = null; + String s = null; + String evaluator = ""; + jj_consume_token(IF_SYM); + label_69: while (true) { + s = booleanExpressionToken(); + evaluator += s; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + case EQ: + case PLUS: + case MINUS: + case PRECEDES: + case SUCCEEDS: + case DIV: + case ANY: + case LPARAN: + case RPARAN: + case COMPARE: + case OR: + case AND: + case NOT_EQ: + case IDENT: + case NUMBER: + case VARIABLE: + case CONTAINS: + ; + break; + default: + jj_la1[107] = jj_gen; + break label_69; + } + } + jj_consume_token(LBRACE); + label_70: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[108] = jj_gen; + break label_70; + } + jj_consume_token(S); + } + documentHandler.startIfElseDirective(); + documentHandler.ifDirective(evaluator); + label_71: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case FONT_FACE_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ; + break; + default: + jj_la1[109] = jj_gen; + break label_71; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ifContentStatement(); + break; + case FONT_FACE_SYM: + fontFace(); + break; + default: + jj_la1[110] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(RBRACE); + label_72: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[111] = jj_gen; + break label_72; + } + jj_consume_token(S); + } + label_73: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case ELSE_SYM: + ; + break; + default: + jj_la1[112] = jj_gen; + break label_73; + } + elseDirective(); + } + documentHandler.endIfElseDirective(); + } + + final public void elseDirective() throws ParseException { + String evaluator = ""; + Token n = null; + String s = null; + jj_consume_token(ELSE_SYM); + label_74: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[113] = jj_gen; + break label_74; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IF: + jj_consume_token(IF); + label_75: while (true) { + s = booleanExpressionToken(); + evaluator += s; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + case EQ: + case PLUS: + case MINUS: + case PRECEDES: + case SUCCEEDS: + case DIV: + case ANY: + case LPARAN: + case RPARAN: + case COMPARE: + case OR: + case AND: + case NOT_EQ: + case IDENT: + case NUMBER: + case VARIABLE: + case CONTAINS: + ; + break; + default: + jj_la1[114] = jj_gen; + break label_75; + } + } + break; + default: + jj_la1[115] = jj_gen; + ; + } + jj_consume_token(LBRACE); + label_76: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[116] = jj_gen; + break label_76; + } + jj_consume_token(S); + } + if (!evaluator.trim().equals("")) { + documentHandler.ifDirective(evaluator); + } else { + documentHandler.elseDirective(); + } + label_77: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case FONT_FACE_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ; + break; + default: + jj_la1[117] = jj_gen; + break label_77; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ifContentStatement(); + break; + case FONT_FACE_SYM: + fontFace(); + break; + default: + jj_la1[118] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(RBRACE); + label_78: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[119] = jj_gen; + break label_78; + } + jj_consume_token(S); + } + } + + final public String booleanExpressionToken() throws ParseException { + Token n = null; + String s = null; + if (jj_2_4(2147483647)) { + s = containsDirective(); + } else { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case VARIABLE: + n = jj_consume_token(VARIABLE); + break; + case IDENT: + n = jj_consume_token(IDENT); + break; + case NUMBER: + n = jj_consume_token(NUMBER); + break; + case LPARAN: + n = jj_consume_token(LPARAN); + break; + case RPARAN: + n = jj_consume_token(RPARAN); + break; + case PLUS: + n = jj_consume_token(PLUS); + break; + case MINUS: + n = jj_consume_token(MINUS); + break; + case DIV: + n = jj_consume_token(DIV); + break; + case ANY: + n = jj_consume_token(ANY); + break; + case COMPARE: + n = jj_consume_token(COMPARE); + break; + case EQ: + n = jj_consume_token(EQ); + break; + case PRECEDES: + n = jj_consume_token(PRECEDES); + break; + case SUCCEEDS: + n = jj_consume_token(SUCCEEDS); + break; + case OR: + n = jj_consume_token(OR); + break; + case AND: + n = jj_consume_token(AND); + break; + case S: + n = jj_consume_token(S); + break; + case NOT_EQ: + n = jj_consume_token(NOT_EQ); + break; + default: + jj_la1[120] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + if (n != null) { + { + if (true) { + return n.image; + } + } + } else { + { + if (true) { + return s; + } + } + } + throw new Error("Missing return statement in function"); + } + + final public void eachDirective() throws ParseException { + Token var; + ArrayList list = null; + String listVariable = null; + jj_consume_token(EACH_SYM); + label_79: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[121] = jj_gen; + break label_79; + } + jj_consume_token(S); + } + var = jj_consume_token(VARIABLE); + label_80: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[122] = jj_gen; + break label_80; + } + jj_consume_token(S); + } + jj_consume_token(EACH_IN); + label_81: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[123] = jj_gen; + break label_81; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + list = stringList(); + documentHandler.startEachDirective(var.image, list); + break; + case VARIABLE: + listVariable = variableName(); + documentHandler.startEachDirective(var.image, listVariable); + break; + default: + jj_la1[124] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(LBRACE); + label_82: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[125] = jj_gen; + break label_82; + } + jj_consume_token(S); + } + label_83: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ; + break; + default: + jj_la1[126] = jj_gen; + break label_83; + } + ifContentStatement(); + } + jj_consume_token(RBRACE); + label_84: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[127] = jj_gen; + break label_84; + } + jj_consume_token(S); + } + documentHandler.endEachDirective(); + } + + final public ArrayList stringList() throws ParseException { + ArrayList strings = new ArrayList(); + Token input; + input = jj_consume_token(IDENT); + label_85: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[128] = jj_gen; + break label_85; + } + jj_consume_token(S); + } + strings.add(input.image); + label_86: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[129] = jj_gen; + break label_86; + } + jj_consume_token(COMMA); + label_87: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[130] = jj_gen; + break label_87; + } + jj_consume_token(S); + } + input = jj_consume_token(IDENT); + strings.add(input.image); + label_88: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[131] = jj_gen; + break label_88; + } + jj_consume_token(S); + } + } + { + if (true) { + return strings; + } + } + throw new Error("Missing return statement in function"); + } + + final public void mixinDirective() throws ParseException { + String name; + ArrayList args = null; + String body; + jj_consume_token(MIXIN_SYM); + label_89: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[132] = jj_gen; + break label_89; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + name = property(); + break; + case FUNCTION: + name = functionName(); + args = arglist(); + jj_consume_token(RPARAN); + label_90: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[133] = jj_gen; + break label_90; + } + jj_consume_token(S); + } + break; + default: + jj_la1[134] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + jj_consume_token(LBRACE); + label_91: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[135] = jj_gen; + break label_91; + } + jj_consume_token(S); + } + documentHandler.startMixinDirective(name, args); + label_92: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case PAGE_SYM: + case FONT_FACE_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ; + break; + default: + jj_la1[136] = jj_gen; + break label_92; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case INCLUDE_SYM: + case DEBUG_SYM: + case WARN_SYM: + case EACH_SYM: + case IF_SYM: + case EXTEND_SYM: + case CONTENT_SYM: + case IDENT: + case VARIABLE: + case HASH: + case MEDIA_SYM: + case KEY_FRAME_SYM: + case ATKEYWORD: + ifContentStatement(); + break; + case FONT_FACE_SYM: + fontFace(); + break; + case PAGE_SYM: + page(); + break; + default: + jj_la1[137] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(RBRACE); + label_93: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[138] = jj_gen; + break label_93; + } + jj_consume_token(S); + } + documentHandler.endMixinDirective(name, args); + } + + final public ArrayList arglist() throws ParseException { + ArrayList args = new ArrayList(); + VariableNode arg; + boolean hasNonOptionalArgument = false; + arg = mixinArg(); + label_94: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[139] = jj_gen; + break label_94; + } + jj_consume_token(COMMA); + label_95: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[140] = jj_gen; + break label_95; + } + jj_consume_token(S); + } + hasNonOptionalArgument = checkMixinForNonOptionalArguments(arg, + hasNonOptionalArgument); + args.add(arg); + arg = mixinArg(); + } + hasNonOptionalArgument = checkMixinForNonOptionalArguments(arg, + hasNonOptionalArgument); + args.add(arg); + { + if (true) { + return args; + } + } + throw new Error("Missing return statement in function"); + } + + boolean checkMixinForNonOptionalArguments(VariableNode arg, + boolean hasNonOptionalArguments) throws ParseException { + boolean currentArgHasArguments = arg.getExpr() != null + && arg.getExpr().getLexicalUnitType() == LexicalUnitImpl.SCSS_VARIABLE + && arg.getExpr().getNextLexicalUnit() != null; + + if (currentArgHasArguments) { + if (hasNonOptionalArguments) { + throw new ParseException("Sass Error: Required argument $" + + arg.getName() + + " must come before any optional arguments."); + } + return hasNonOptionalArguments; + } else { + return true; + } + } + + final public VariableNode mixinArg() throws ParseException { + String name; + Token variable = null; + LexicalUnitImpl first = null; + LexicalUnitImpl prev = null; + LexicalUnitImpl next = null; + name = variableName(); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COLON: + case VARIABLE: + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COLON: + jj_consume_token(COLON); + label_96: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[141] = jj_gen; + break label_96; + } + jj_consume_token(S); + } + first = nonVariableTerm(null); + prev = first; + label_97: while (true) { + if (jj_2_5(3)) { + ; + } else { + break label_97; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + jj_consume_token(COMMA); + label_98: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[142] = jj_gen; + break label_98; + } + jj_consume_token(S); + } + break; + default: + jj_la1[143] = jj_gen; + ; + } + prev = nonVariableTerm(prev); + } + break; + case VARIABLE: + variable = jj_consume_token(VARIABLE); + first = LexicalUnitImpl.createVariable(token.beginLine, + token.beginColumn, prev, variable.image); + break; + default: + jj_la1[144] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + default: + jj_la1[145] = jj_gen; + ; + } + VariableNode arg = new VariableNode(name, first, false); + { + if (true) { + return arg; + } + } + throw new Error("Missing return statement in function"); + } + + final public ArrayList argValuelist() + throws ParseException { + ArrayList args = new ArrayList(); + LexicalUnitImpl first = null; + LexicalUnitImpl next = null; + LexicalUnitImpl prev = null; + first = term(null); + args.add(first); + prev = first; + label_99: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case MINUS: + case DOT: + case COLON: + case TO: + case THROUGH: + case FROM: + case STRING: + case IDENT: + case NUMBER: + case URL: + case VARIABLE: + case PERCENTAGE: + case PT: + case MM: + case CM: + case PC: + case IN: + case PX: + case EMS: + case LEM: + case REM: + case EXS: + case DEG: + case RAD: + case GRAD: + case MS: + case SECOND: + case HZ: + case KHZ: + case DIMEN: + case HASH: + case UNICODERANGE: + case FUNCTION: + ; + break; + default: + jj_la1[146] = jj_gen; + break label_99; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COLON: + jj_consume_token(COLON); + label_100: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[147] = jj_gen; + break label_100; + } + jj_consume_token(S); + } + break; + default: + jj_la1[148] = jj_gen; + ; + } + next = term(prev); + prev.setNextLexicalUnit(next); + prev = next; + } + label_101: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + ; + break; + default: + jj_la1[149] = jj_gen; + break label_101; + } + jj_consume_token(COMMA); + label_102: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[150] = jj_gen; + break label_102; + } + jj_consume_token(S); + } + first = term(null); + args.add(first); + prev = first; + label_103: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case MINUS: + case DOT: + case COLON: + case TO: + case THROUGH: + case FROM: + case STRING: + case IDENT: + case NUMBER: + case URL: + case VARIABLE: + case PERCENTAGE: + case PT: + case MM: + case CM: + case PC: + case IN: + case PX: + case EMS: + case LEM: + case REM: + case EXS: + case DEG: + case RAD: + case GRAD: + case MS: + case SECOND: + case HZ: + case KHZ: + case DIMEN: + case HASH: + case UNICODERANGE: + case FUNCTION: + ; + break; + default: + jj_la1[151] = jj_gen; + break label_103; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COLON: + jj_consume_token(COLON); + label_104: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[152] = jj_gen; + break label_104; + } + jj_consume_token(S); + } + break; + default: + jj_la1[153] = jj_gen; + ; + } + next = term(prev); + prev.setNextLexicalUnit(next); + prev = next; + } + } + { + if (true) { + return args; + } + } + throw new Error("Missing return statement in function"); + } + + final public void includeDirective() throws ParseException { + String name; + ArrayList args = null; + jj_consume_token(INCLUDE_SYM); + label_105: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[154] = jj_gen; + break label_105; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + name = property(); + break; + case VARIABLE: + name = variableName(); + name = "$" + name; + break; + case FUNCTION: + name = functionName(); + args = argValuelist(); + jj_consume_token(RPARAN); + label_106: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[155] = jj_gen; + break label_106; + } + jj_consume_token(S); + } + break; + default: + jj_la1[156] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + label_107: while (true) { + jj_consume_token(SEMICOLON); + label_108: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[157] = jj_gen; + break label_108; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[158] = jj_gen; + break label_107; + } + } + documentHandler.includeDirective(name, args); + break; + case LBRACE: + jj_consume_token(LBRACE); + label_109: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[159] = jj_gen; + break label_109; + } + jj_consume_token(S); + } + documentHandler.startIncludeContentBlock(name, args); + label_110: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case TO: + case FROM: + case DEBUG_SYM: + case WARN_SYM: + case IDENT: + case PERCENTAGE: + case HASH: + ; + break; + default: + jj_la1[160] = jj_gen; + break label_110; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case DEBUG_SYM: + case WARN_SYM: + case IDENT: + case HASH: + styleRuleOrDeclarationOrNestedProperties(); + break; + case TO: + case FROM: + case PERCENTAGE: + keyframeSelector(); + break; + default: + jj_la1[161] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + jj_consume_token(RBRACE); + label_111: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[162] = jj_gen; + break label_111; + } + jj_consume_token(S); + } + documentHandler.endIncludeContentBlock(); + break; + default: + jj_la1[163] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + + final public String interpolation() throws ParseException { + Token n; + n = jj_consume_token(INTERPOLATION); + { + if (true) { + return n.image; + } + } + throw new Error("Missing return statement in function"); + } + + final public void listModifyDirective() throws ParseException { + String list = null; + String remove = null; + String separator = null; + String variable = null; + Token n = null; + Token type = null; + // refactor, remove those 3 LOOKAHEAD(5). + n = jj_consume_token(VARIABLE); + variable = n.image; + label_112: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[164] = jj_gen; + break label_112; + } + jj_consume_token(S); + } + jj_consume_token(COLON); + label_113: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[165] = jj_gen; + break label_113; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case APPEND: + type = jj_consume_token(APPEND); + break; + case REMOVE: + type = jj_consume_token(REMOVE); + break; + case CONTAINS: + type = jj_consume_token(CONTAINS); + break; + default: + jj_la1[166] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_114: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[167] = jj_gen; + break label_114; + } + jj_consume_token(S); + } + list = listModifyDirectiveArgs(0); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case RPARAN: + jj_consume_token(RPARAN); + break; + default: + jj_la1[168] = jj_gen; + ; + } + jj_consume_token(COMMA); + label_115: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[169] = jj_gen; + break label_115; + } + jj_consume_token(S); + } + remove = listModifyDirectiveArgs(1); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + jj_consume_token(COMMA); + label_116: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[170] = jj_gen; + break label_116; + } + jj_consume_token(S); + } + n = jj_consume_token(IDENT); + separator = n.image; + label_117: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[171] = jj_gen; + break label_117; + } + jj_consume_token(S); + } + break; + default: + jj_la1[172] = jj_gen; + ; + } + jj_consume_token(RPARAN); + switch (type.kind) { + case APPEND: + documentHandler.appendDirective(variable, list, remove, separator); + break; + case REMOVE: + documentHandler.removeDirective(variable, list, remove, separator); + break; + case CONTAINS: + if (variable == null) { + variable = "$var_" + UUID.randomUUID(); + } + documentHandler + .containsDirective(variable, list, remove, separator); + break; + default: + break; + } + label_118: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[173] = jj_gen; + break label_118; + } + jj_consume_token(S); + } + jj_consume_token(SEMICOLON); + label_119: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[174] = jj_gen; + break label_119; + } + jj_consume_token(S); + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void appendDirective() throws ParseException { + String list = null; + String remove = null; + String separator = null; + String variable = null; + Token n = null; + n = jj_consume_token(VARIABLE); + variable = n.image; + label_120: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[175] = jj_gen; + break label_120; + } + jj_consume_token(S); + } + jj_consume_token(COLON); + label_121: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[176] = jj_gen; + break label_121; + } + jj_consume_token(S); + } + jj_consume_token(APPEND); + label_122: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[177] = jj_gen; + break label_122; + } + jj_consume_token(S); + } + list = listModifyDirectiveArgs(0); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case RPARAN: + jj_consume_token(RPARAN); + break; + default: + jj_la1[178] = jj_gen; + ; + } + jj_consume_token(COMMA); + label_123: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[179] = jj_gen; + break label_123; + } + jj_consume_token(S); + } + remove = listModifyDirectiveArgs(1); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + jj_consume_token(COMMA); + label_124: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[180] = jj_gen; + break label_124; + } + jj_consume_token(S); + } + n = jj_consume_token(IDENT); + separator = n.image; + label_125: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[181] = jj_gen; + break label_125; + } + jj_consume_token(S); + } + break; + default: + jj_la1[182] = jj_gen; + ; + } + jj_consume_token(RPARAN); + documentHandler.appendDirective(variable, list, remove, separator); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void removeDirective() throws ParseException { + String list = null; + String remove = null; + String separator = null; + String variable = null; + Token n = null; + n = jj_consume_token(VARIABLE); + variable = n.image; + label_126: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[183] = jj_gen; + break label_126; + } + jj_consume_token(S); + } + jj_consume_token(COLON); + label_127: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[184] = jj_gen; + break label_127; + } + jj_consume_token(S); + } + jj_consume_token(REMOVE); + label_128: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[185] = jj_gen; + break label_128; + } + jj_consume_token(S); + } + list = listModifyDirectiveArgs(0); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case RPARAN: + jj_consume_token(RPARAN); + break; + default: + jj_la1[186] = jj_gen; + ; + } + jj_consume_token(COMMA); + label_129: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[187] = jj_gen; + break label_129; + } + jj_consume_token(S); + } + remove = listModifyDirectiveArgs(1); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + jj_consume_token(COMMA); + label_130: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[188] = jj_gen; + break label_130; + } + jj_consume_token(S); + } + n = jj_consume_token(IDENT); + separator = n.image; + label_131: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[189] = jj_gen; + break label_131; + } + jj_consume_token(S); + } + break; + default: + jj_la1[190] = jj_gen; + ; + } + jj_consume_token(RPARAN); + documentHandler.removeDirective(variable, list, remove, separator); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public String containsDirective() throws ParseException { + String list = null; + String remove = null; + String separator = null; + String variable = null; + Token n = null; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case VARIABLE: + n = jj_consume_token(VARIABLE); + variable = n.image; + label_132: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[191] = jj_gen; + break label_132; + } + jj_consume_token(S); + } + jj_consume_token(COLON); + label_133: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[192] = jj_gen; + break label_133; + } + jj_consume_token(S); + } + break; + default: + jj_la1[193] = jj_gen; + ; + } + jj_consume_token(CONTAINS); + label_134: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[194] = jj_gen; + break label_134; + } + jj_consume_token(S); + } + list = listModifyDirectiveArgs(0); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case RPARAN: + jj_consume_token(RPARAN); + break; + default: + jj_la1[195] = jj_gen; + ; + } + jj_consume_token(COMMA); + label_135: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[196] = jj_gen; + break label_135; + } + jj_consume_token(S); + } + remove = listModifyDirectiveArgs(1); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + jj_consume_token(COMMA); + label_136: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[197] = jj_gen; + break label_136; + } + jj_consume_token(S); + } + n = jj_consume_token(IDENT); + separator = n.image; + label_137: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[198] = jj_gen; + break label_137; + } + jj_consume_token(S); + } + break; + default: + jj_la1[199] = jj_gen; + ; + } + jj_consume_token(RPARAN); + /* + * if it is not in the form like + * "$contains : contains($items, .v-button);"for example in @if, like + * "@if (contains(a b c, b))", then create a tempvariable for contains(a + * b c, b); + */ + if (variable == null) { + variable = "$var_" + UUID.randomUUID(); + } + documentHandler.containsDirective(variable, list, remove, separator); + { + if (true) { + return variable; + } + } + throw new Error("Missing return statement in function"); + } + + String listModifyDirectiveArgs(int nest) throws ParseException { + String list = ""; + int nesting = nest; + Token t = null; + + while (true) { + t = getToken(1); + String s = t.image; + if (t.kind == VARIABLE || t.kind == IDENT) { + list += s; + } else if (s.toLowerCase().equals("auto") + || s.toLowerCase().equals("space") + || s.toLowerCase().equals("comma")) { + int i = 2; + Token temp = getToken(i); + boolean isLast = true; + while (temp.kind != SEMICOLON) { + if (temp.kind != RPARAN || temp.kind != S) { + isLast = false; + } + i++; + temp = getToken(i); + } + + if (isLast) { + return list; + } + } else if (t.kind == STRING) { + list += s.substring(1, s.length()).substring(0, s.length() - 2); + + } else if (t.kind == LPARAN) { + nesting++; + if (nesting > nest + 1) { + throw new CSSParseException( + "Only one ( ) pair per parameter allowed", + getLocator()); + } + } else if (t.kind == RPARAN) { + nesting--; + if (nesting == 0) { + return list; + } + } else if (t.kind == COMMA) { + if (nesting == nest) { + return list; + } else { + list += ","; + } + + } else if (t.kind == S) { + list += " "; + } else if (t.kind == LBRACE) { + throw new CSSParseException("Invalid token,'{' found", + getLocator()); + } + + getNextToken(); + } + } + + final public Node returnDirective() throws ParseException { + String raw; + raw = skipStatement(); + { + if (true) { + return null; + } + } + throw new Error("Missing return statement in function"); + } + + final public void debuggingDirective() throws ParseException { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case DEBUG_SYM: + debugDirective(); + break; + case WARN_SYM: + warnDirective(); + break; + default: + jj_la1[200] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + + final public void debugDirective() throws ParseException { + jj_consume_token(DEBUG_SYM); + String content = skipStatementUntilSemiColon(); + // TODO should evaluate the content expression, call + // documentHandler.debugDirective() etc. + System.out.println(content); + label_138: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[201] = jj_gen; + break label_138; + } + jj_consume_token(S); + } + } + + final public void warnDirective() throws ParseException { + jj_consume_token(WARN_SYM); + String content = skipStatementUntilSemiColon(); + // TODO should evaluate the content expression, call + // documentHandler.warnDirective() etc. + System.err.println(content); + label_139: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[202] = jj_gen; + break label_139; + } + jj_consume_token(S); + } + } + + final public Node forDirective() throws ParseException { + String var; + String from; + String to; + boolean exclusive; + String body; + Token tok; + var = variableName(); + int[] toThrough = { TO, THROUGH }; + from = skipStatementUntil(toThrough); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case TO: + tok = jj_consume_token(TO); + exclusive = true; + break; + case THROUGH: + tok = jj_consume_token(THROUGH); + exclusive = false; + break; + default: + jj_la1[203] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + to = skipStatementUntilLeftBrace(); + label_140: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[204] = jj_gen; + break label_140; + } + jj_consume_token(S); + } + body = skipStatement(); + { + if (true) { + return documentHandler.forDirective(var, from, to, exclusive, + body); + } + } + throw new Error("Missing return statement in function"); + } + + final public Node whileDirective() throws ParseException { + String condition; + String body; + condition = skipStatementUntilLeftBrace(); + body = skipStatement(); + { + if (true) { + return documentHandler.whileDirective(condition, body); + } + } + throw new Error("Missing return statement in function"); + } + + final public void extendDirective() throws ParseException { + ArrayList list; + jj_consume_token(EXTEND_SYM); + label_141: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[205] = jj_gen; + break label_141; + } + jj_consume_token(S); + } + list = selectorList(); + label_142: while (true) { + jj_consume_token(SEMICOLON); + label_143: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[206] = jj_gen; + break label_143; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[207] = jj_gen; + break label_142; + } + } + documentHandler.extendDirective(list); + } + + final public void contentDirective() throws ParseException { + jj_consume_token(CONTENT_SYM); + label_144: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[208] = jj_gen; + break label_144; + } + jj_consume_token(S); + } + label_145: while (true) { + jj_consume_token(SEMICOLON); + label_146: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[209] = jj_gen; + break label_146; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[210] = jj_gen; + break label_145; + } + } + documentHandler.contentDirective(); + } + + Node importDirective() throws ParseException { + return null; + } + + Node charsetDirective() throws ParseException { + return null; + } + + Node mozDocumentDirective() throws ParseException { + return null; + } + + Node supportsDirective() throws ParseException { + return null; + } + + final public void nestedProperties() throws ParseException { + String name; + LexicalUnit exp; + name = property(); + jj_consume_token(COLON); + label_147: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[211] = jj_gen; + break label_147; + } + jj_consume_token(S); + } + jj_consume_token(LBRACE); + label_148: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[212] = jj_gen; + break label_148; + } + jj_consume_token(S); + } + documentHandler.startNestedProperties(name); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[213] = jj_gen; + ; + } + label_149: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[214] = jj_gen; + break label_149; + } + jj_consume_token(SEMICOLON); + label_150: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[215] = jj_gen; + break label_150; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[216] = jj_gen; + ; + } + } + jj_consume_token(RBRACE); + documentHandler.endNestedProperties(name); + label_151: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[217] = jj_gen; + break label_151; + } + jj_consume_token(S); + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void styleRuleOrDeclarationOrNestedProperties() + throws ParseException { + try { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case DEBUG_SYM: + case WARN_SYM: + debuggingDirective(); + break; + default: + jj_la1[218] = jj_gen; + if (jj_2_6(2147483647)) { + styleRule(); + } else if (jj_2_7(3)) { + declarationOrNestedProperties(); + } else { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case IDENT: + case HASH: + styleRule(); + break; + default: + jj_la1[219] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + } catch (JumpException e) { + skipAfterExpression(); + // reportWarningSkipText(getLocator(), skipAfterExpression()); + + } catch (ParseException e) { + if (errorHandler != null) { + if (e.currentToken != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn - 1); + reportError(li, e); + } else { + reportError(getLocator(), e); + } + skipAfterExpression(); + /* + * LocatorImpl loc = (LocatorImpl) getLocator(); loc.column--; + * reportWarningSkipText(loc, skipAfterExpression()); + */ + } else { + skipAfterExpression(); + } + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void declarationOrNestedProperties() throws ParseException { + boolean important = false; + String name; + LexicalUnitImpl exp; + Token save; + String comment = null; + try { + name = property(); + save = token; + jj_consume_token(COLON); + label_152: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[220] = jj_gen; + break label_152; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case MINUS: + case DOT: + case TO: + case THROUGH: + case FROM: + case STRING: + case IDENT: + case NUMBER: + case URL: + case VARIABLE: + case PERCENTAGE: + case PT: + case MM: + case CM: + case PC: + case IN: + case PX: + case EMS: + case LEM: + case REM: + case EXS: + case DEG: + case RAD: + case GRAD: + case MS: + case SECOND: + case HZ: + case KHZ: + case DIMEN: + case HASH: + case UNICODERANGE: + case FUNCTION: + exp = expr(); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IMPORTANT_SYM: + important = prio(); + break; + default: + jj_la1[221] = jj_gen; + ; + } + Token next = getToken(1); + if (next.kind == SEMICOLON || next.kind == RBRACE) { + while (next.kind == SEMICOLON) { + skipStatement(); + next = getToken(1); + } + // 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); + } + } + break; + case LBRACE: + jj_consume_token(LBRACE); + label_153: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[222] = jj_gen; + break label_153; + } + jj_consume_token(S); + } + documentHandler.startNestedProperties(name); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[223] = jj_gen; + ; + } + label_154: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[224] = jj_gen; + break label_154; + } + jj_consume_token(SEMICOLON); + label_155: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[225] = jj_gen; + break label_155; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[226] = jj_gen; + ; + } + } + jj_consume_token(RBRACE); + label_156: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[227] = jj_gen; + break label_156; + } + jj_consume_token(S); + } + documentHandler.endNestedProperties(name); + break; + default: + jj_la1[228] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } catch (JumpException e) { + skipAfterExpression(); + // reportWarningSkipText(getLocator(), skipAfterExpression()); + + } catch (NumberFormatException e) { + if (errorHandler != null) { + errorHandler.error(new CSSParseException("Invalid number " + + e.getMessage(), getLocator(), e)); + } + reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (ParseException e) { + if (errorHandler != null) { + if (e.currentToken != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn - 1); + reportError(li, e); + } else { + reportError(getLocator(), e); + } + skipAfterExpression(); + /* + * LocatorImpl loc = (LocatorImpl) getLocator(); loc.column--; + * reportWarningSkipText(loc, skipAfterExpression()); + */ + } else { + skipAfterExpression(); + } + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public void declaration() throws ParseException { + boolean important = false; + String name; + LexicalUnit exp; + Token save; + try { + name = property(); + save = token; + jj_consume_token(COLON); + label_157: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[229] = jj_gen; + break label_157; + } + jj_consume_token(S); + } + exp = expr(); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IMPORTANT_SYM: + important = prio(); + break; + default: + jj_la1[230] = jj_gen; + ; + } + documentHandler.property(name, exp, important); + } catch (JumpException e) { + skipAfterExpression(); + // reportWarningSkipText(getLocator(), skipAfterExpression()); + + } catch (NumberFormatException e) { + if (errorHandler != null) { + errorHandler.error(new CSSParseException("Invalid number " + + e.getMessage(), getLocator(), e)); + } + reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (ParseException e) { + if (errorHandler != null) { + if (e.currentToken != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn - 1); + reportError(li, e); + } else { + reportError(getLocator(), e); + } + skipAfterExpression(); + /* + * LocatorImpl loc = (LocatorImpl) getLocator(); loc.column--; + * reportWarningSkipText(loc, skipAfterExpression()); + */ + } else { + skipAfterExpression(); + } + } + } + + /** + * @exception ParseException + * exception during the parse + */ + final public boolean prio() throws ParseException { + jj_consume_token(IMPORTANT_SYM); + label_158: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[231] = jj_gen; + break label_158; + } + jj_consume_token(S); + } + { + if (true) { + return true; + } + } + throw new Error("Missing return statement in function"); + } + + final public boolean guarded() throws ParseException { + jj_consume_token(GUARDED_SYM); + label_159: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[232] = jj_gen; + break label_159; + } + jj_consume_token(S); + } + { + if (true) { + return true; + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public LexicalUnitImpl operator(LexicalUnitImpl prev) + throws ParseException { + Token n; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case COMMA: + /* + * (comments copied from basic_arithmetics.scss)supports: 1. + * standard arithmetic operations (+, -, *, /, %) 2. / is treated as + * css operator, unless one of its operands is variable or there is + * another binary arithmetic operatorlimits: 1. cannot mix + * arithmetic and css operations, e.g. "margin: 1px + 3px 2px" will + * fail 2. space between add and minus operator and their following + * operand is mandatory. e.g. "1 + 2" is valid, "1+2" is not 3. + * parenthesis is not supported now. + */ + n = jj_consume_token(COMMA); + label_160: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[233] = jj_gen; + break label_160; + } + jj_consume_token(S); + } + { + if (true) { + return LexicalUnitImpl.createComma(n.beginLine, + n.beginColumn, prev); + } + } + break; + case DIV: + n = jj_consume_token(DIV); + label_161: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[234] = jj_gen; + break label_161; + } + jj_consume_token(S); + } + { + if (true) { + return LexicalUnitImpl.createSlash(n.beginLine, + n.beginColumn, prev); + } + } + break; + case ANY: + n = jj_consume_token(ANY); + label_162: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[235] = jj_gen; + break label_162; + } + jj_consume_token(S); + } + { + if (true) { + return LexicalUnitImpl.createMultiply(n.beginLine, + n.beginColumn, prev); + } + } + break; + case MOD: + n = jj_consume_token(MOD); + label_163: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[236] = jj_gen; + break label_163; + } + jj_consume_token(S); + } + { + if (true) { + return LexicalUnitImpl.createModulo(n.beginLine, + n.beginColumn, prev); + } + } + break; + case PLUS: + n = jj_consume_token(PLUS); + label_164: while (true) { + jj_consume_token(S); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[237] = jj_gen; + break label_164; + } + } + { + if (true) { + return LexicalUnitImpl.createAdd(n.beginLine, + n.beginColumn, prev); + } + } + break; + case MINUS: + n = jj_consume_token(MINUS); + label_165: while (true) { + jj_consume_token(S); + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[238] = jj_gen; + break label_165; + } + } + { + if (true) { + return LexicalUnitImpl.createMinus(n.beginLine, + n.beginColumn, prev); + } + } + break; + default: + jj_la1[239] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public LexicalUnitImpl expr() throws ParseException { + LexicalUnitImpl first, res; + char op; + first = term(null); + res = first; + label_166: while (true) { + if (jj_2_8(2)) { + ; + } else { + break label_166; + } + if (jj_2_9(2)) { + res = operator(res); + } else { + ; + } + res = term(res); + } + { + if (true) { + return first; + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public char unaryOperator() throws ParseException { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case MINUS: + jj_consume_token(MINUS); + { + if (true) { + return '-'; + } + } + break; + case PLUS: + jj_consume_token(PLUS); + { + if (true) { + return '+'; + } + } + break; + default: + jj_la1[240] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public LexicalUnitImpl term(LexicalUnitImpl prev) + throws ParseException { + LexicalUnitImpl result = null; + Token n = null; + char op = ' '; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case MINUS: + case DOT: + case TO: + case THROUGH: + case FROM: + case STRING: + case IDENT: + case NUMBER: + case URL: + case PERCENTAGE: + case PT: + case MM: + case CM: + case PC: + case IN: + case PX: + case EMS: + case LEM: + case REM: + case EXS: + case DEG: + case RAD: + case GRAD: + case MS: + case SECOND: + case HZ: + case KHZ: + case DIMEN: + case HASH: + case UNICODERANGE: + case FUNCTION: + result = nonVariableTerm(prev); + break; + case VARIABLE: + result = variableTerm(prev); + break; + default: + jj_la1[241] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + { + if (true) { + return result; + } + } + throw new Error("Missing return statement in function"); + } + + final public LexicalUnitImpl variableTerm(LexicalUnitImpl prev) + throws ParseException { + LexicalUnitImpl result = null; + String varName = ""; + varName = variableName(); + result = LexicalUnitImpl.createVariable(token.beginLine, + token.beginColumn, prev, varName); + { + if (true) { + return result; + } + } + throw new Error("Missing return statement in function"); + } + + final public LexicalUnitImpl nonVariableTerm(LexicalUnitImpl prev) + throws ParseException { + LexicalUnitImpl result = null; + Token n = null; + char op = ' '; + String varName; + String s = ""; + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case MINUS: + case NUMBER: + case PERCENTAGE: + case PT: + case MM: + case CM: + case PC: + case IN: + case PX: + case EMS: + case LEM: + case REM: + case EXS: + case DEG: + case RAD: + case GRAD: + case MS: + case SECOND: + case HZ: + case KHZ: + case DIMEN: + case FUNCTION: + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case MINUS: + op = unaryOperator(); + break; + default: + jj_la1[242] = jj_gen; + ; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case NUMBER: + n = jj_consume_token(NUMBER); + result = LexicalUnitImpl.createNumber(n.beginLine, + n.beginColumn, prev, number(op, n, 0)); + break; + case PERCENTAGE: + n = jj_consume_token(PERCENTAGE); + result = LexicalUnitImpl.createPercentage(n.beginLine, + n.beginColumn, prev, number(op, n, 1)); + break; + case PT: + n = jj_consume_token(PT); + result = LexicalUnitImpl.createPT(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case CM: + n = jj_consume_token(CM); + result = LexicalUnitImpl.createCM(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case MM: + n = jj_consume_token(MM); + result = LexicalUnitImpl.createMM(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case PC: + n = jj_consume_token(PC); + result = LexicalUnitImpl.createPC(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case IN: + n = jj_consume_token(IN); + result = LexicalUnitImpl.createIN(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case PX: + n = jj_consume_token(PX); + result = LexicalUnitImpl.createPX(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case EMS: + n = jj_consume_token(EMS); + result = LexicalUnitImpl.createEMS(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case LEM: + n = jj_consume_token(LEM); + result = LexicalUnitImpl.createLEM(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); + break; + case REM: + n = jj_consume_token(REM); + result = LexicalUnitImpl.createREM(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); + break; + case EXS: + n = jj_consume_token(EXS); + result = LexicalUnitImpl.createEXS(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case DEG: + n = jj_consume_token(DEG); + result = LexicalUnitImpl.createDEG(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); + break; + case RAD: + n = jj_consume_token(RAD); + result = LexicalUnitImpl.createRAD(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); + break; + case GRAD: + n = jj_consume_token(GRAD); + result = LexicalUnitImpl.createGRAD(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); + break; + case SECOND: + n = jj_consume_token(SECOND); + result = LexicalUnitImpl.createS(n.beginLine, n.beginColumn, + prev, number(op, n, 1)); + break; + case MS: + n = jj_consume_token(MS); + result = LexicalUnitImpl.createMS(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case HZ: + n = jj_consume_token(HZ); + result = LexicalUnitImpl.createHZ(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); + break; + case KHZ: + n = jj_consume_token(KHZ); + result = LexicalUnitImpl.createKHZ(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); + break; + case DIMEN: + n = jj_consume_token(DIMEN); + s = n.image; + int i = 0; + while (i < s.length() + && (Character.isDigit(s.charAt(i)) || (s.charAt(i) == '.'))) { + i++; + } + + result = LexicalUnitImpl.createDimen(n.beginLine, + n.beginColumn, prev, number(op, n, s.length() - i), + s.substring(i)); + break; + case FUNCTION: + result = function(op, prev); + break; + default: + jj_la1[243] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + case DOT: + case TO: + case THROUGH: + case FROM: + case STRING: + case IDENT: + case URL: + case HASH: + case UNICODERANGE: + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case STRING: + n = jj_consume_token(STRING); + result = LexicalUnitImpl.createString(n.beginLine, + n.beginColumn, prev, + convertStringIndex(n.image, 1, n.image.length() - 1)); + break; + case DOT: + case TO: + case THROUGH: + case FROM: + case IDENT: + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case DOT: + jj_consume_token(DOT); + s += "."; + break; + default: + jj_la1[244] = jj_gen; + ; + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IDENT: + n = jj_consume_token(IDENT); + break; + case TO: + n = jj_consume_token(TO); + break; + case THROUGH: + n = jj_consume_token(THROUGH); + break; + case FROM: + n = jj_consume_token(FROM); + break; + default: + jj_la1[245] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + s += convertIdent(n.image); + if ("inherit".equals(s)) { + result = LexicalUnitImpl.createInherit(n.beginLine, + n.beginColumn, prev); + } else { + result = LexicalUnitImpl.createIdent(n.beginLine, + n.beginColumn, prev, convertIdent(n.image)); + } + + /* + * / Auto correction code used in the CSS Validator but must not + * be used by a conformant CSS2 parser. Common error : H1 { + * color : black background : white } + * + * Token t = getToken(1); Token semicolon = new Token(); + * semicolon.kind = SEMICOLON; semicolon.image = ";"; if (t.kind + * == COLON) { // @@SEEME. (generate a warning?) // @@SEEME if + * expression is a single ident, generate an error ? + * rejectToken(semicolon); + * + * result = prev; } / + */ + + break; + case HASH: + result = hexcolor(prev); + break; + case URL: + result = url(prev); + break; + case UNICODERANGE: + result = unicode(prev); + break; + default: + jj_la1[246] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + default: + jj_la1[247] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + label_167: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[248] = jj_gen; + break label_167; + } + jj_consume_token(S); + } + { + if (true) { + return result; + } + } + throw new Error("Missing return statement in function"); + } + + /** + * Handle all CSS2 functions. + * + * @exception ParseException + * exception during the parse + */ + final public LexicalUnitImpl function(char operator, LexicalUnitImpl prev) + throws ParseException { + Token n; + LexicalUnit params = null; + n = jj_consume_token(FUNCTION); + label_168: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[249] = jj_gen; + break label_168; + } + jj_consume_token(S); + } + String fname = convertIdent(n.image); + if ("alpha(".equals(fname)) { + String body = skipStatementUntilSemiColon(); + { + if (true) { + return LexicalUnitImpl.createIdent(n.beginLine, + n.beginColumn, null, "alpha(" + body); + } + } + } else if ("expression(".equals(fname)) { + String body = skipStatementUntilSemiColon(); + { + if (true) { + return LexicalUnitImpl.createIdent(n.beginLine, + n.beginColumn, null, "expression(" + body); + } + } + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case PLUS: + case MINUS: + case DOT: + case TO: + case THROUGH: + case FROM: + case STRING: + case IDENT: + case NUMBER: + case URL: + case VARIABLE: + case PERCENTAGE: + case PT: + case MM: + case CM: + case PC: + case IN: + case PX: + case EMS: + case LEM: + case REM: + case EXS: + case DEG: + case RAD: + case GRAD: + case MS: + case SECOND: + case HZ: + case KHZ: + case DIMEN: + case HASH: + case UNICODERANGE: + case FUNCTION: + params = expr(); + break; + default: + jj_la1[250] = jj_gen; + ; + } + jj_consume_token(RPARAN); + if (operator != ' ') { + { + if (true) { + throw new CSSParseException( + "invalid operator before a function.", getLocator()); + } + } + } + String f = convertIdent(n.image); + LexicalUnitImpl l = (LexicalUnitImpl) params; + boolean loop = true; + if ("rgb(".equals(f)) { + // this is a RGB declaration (e.g. rgb(255, 50%, 0) ) + int i = 0; + while (loop && l != null && i < 5) { + switch (i) { + case 0: + case 2: + case 4: + if ((l.getLexicalUnitType() != LexicalUnit.SAC_INTEGER) + && (l.getLexicalUnitType() != LexicalUnit.SAC_PERCENTAGE)) { + loop = false; + } + break; + case 1: + case 3: + if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { + loop = false; + } + break; + default: { + if (true) { + throw new ParseException("implementation error"); + } + } + } + if (loop) { + l = l.getNextLexicalUnit(); + i++; + } + } + if ((i == 5) && loop && (l == null)) { + { + if (true) { + return LexicalUnitImpl.createRGBColor(n.beginLine, + n.beginColumn, prev, params); + } + } + } else { + if (errorHandler != null) { + String errorText; + Locator loc; + if (i < 5) { + if (params == null) { + loc = new LocatorImpl(this, n.beginLine, + n.beginColumn - 1); + errorText = "not enough parameters."; + } else if (l == null) { + loc = new LocatorImpl(this, n.beginLine, + n.beginColumn - 1); + errorText = "not enough parameters: " + + params.toString(); + } else { + loc = new LocatorImpl(this, l.getLineNumber(), + l.getColumnNumber()); + errorText = "invalid parameter: " + l.toString(); + } + } else { + loc = new LocatorImpl(this, l.getLineNumber(), + l.getColumnNumber()); + errorText = "too many parameters: " + l.toString(); + } + errorHandler.error(new CSSParseException(errorText, loc)); + } + + { + if (true) { + throw new JumpException(); + } + } + } + } else if ("counter".equals(f)) { + int i = 0; + while (loop && l != null && i < 3) { + switch (i) { + case 0: + case 2: + if (l.getLexicalUnitType() != LexicalUnit.SAC_IDENT) { + loop = false; + } + break; + case 1: + if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { + loop = false; + } + break; + default: { + if (true) { + throw new ParseException("implementation error"); + } + } + } + l = l.getNextLexicalUnit(); + i++; + } + if (((i == 1) || (i == 3)) && loop && (l == null)) { + { + if (true) { + return LexicalUnitImpl.createCounter(n.beginLine, + n.beginColumn, prev, params); + } + } + } + + } else if ("counters(".equals(f)) { + + int i = 0; + while (loop && l != null && i < 5) { + switch (i) { + case 0: + case 4: + if (l.getLexicalUnitType() != LexicalUnit.SAC_IDENT) { + loop = false; + } + break; + case 2: + if (l.getLexicalUnitType() != LexicalUnit.SAC_STRING_VALUE) { + loop = false; + } + break; + case 1: + case 3: + if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { + loop = false; + } + break; + default: { + if (true) { + throw new ParseException("implementation error"); + } + } + } + l = l.getNextLexicalUnit(); + i++; + } + if (((i == 3) || (i == 5)) && loop && (l == null)) { + { + if (true) { + return LexicalUnitImpl.createCounters(n.beginLine, + n.beginColumn, prev, params); + } + } + } + } else if ("attr(".equals(f)) { + if ((l != null) && (l.getNextLexicalUnit() == null) + && (l.getLexicalUnitType() == LexicalUnit.SAC_IDENT)) { + { + if (true) { + return LexicalUnitImpl.createAttr(l.getLineNumber(), + l.getColumnNumber(), prev, l.getStringValue()); + } + } + } + } else if ("rect(".equals(f)) { + int i = 0; + while (loop && l != null && i < 7) { + switch (i) { + case 0: + case 2: + case 4: + case 6: + switch (l.getLexicalUnitType()) { + case LexicalUnit.SAC_INTEGER: + if (l.getIntegerValue() != 0) { + loop = false; + } + break; + case LexicalUnit.SAC_IDENT: + if (!l.getStringValue().equals("auto")) { + loop = false; + } + break; + case LexicalUnit.SAC_EM: + case LexicalUnit.SAC_EX: + case LexicalUnit.SAC_PIXEL: + case LexicalUnit.SAC_CENTIMETER: + case LexicalUnit.SAC_MILLIMETER: + case LexicalUnit.SAC_INCH: + case LexicalUnit.SAC_POINT: + case LexicalUnit.SAC_PICA: + // nothing + break; + default: + loop = false; + } + break; + case 1: + case 3: + case 5: + if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { + loop = false; + } + break; + default: { + if (true) { + throw new ParseException("implementation error"); + } + } + } + l = l.getNextLexicalUnit(); + i++; + } + if ((i == 7) && loop && (l == null)) { + { + if (true) { + return LexicalUnitImpl.createRect(n.beginLine, + n.beginColumn, prev, params); + } + } + } + } + { + if (true) { + return LexicalUnitImpl.createFunction(n.beginLine, + n.beginColumn, prev, f.substring(0, f.length() - 1), + params); + } + } + throw new Error("Missing return statement in function"); + } + + final public LexicalUnitImpl unicode(LexicalUnitImpl prev) + throws ParseException { + Token n; + n = jj_consume_token(UNICODERANGE); + LexicalUnitImpl params = null; + String s = n.image.substring(2); + int index = s.indexOf('-'); + if (index == -1) { + params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, + params, Integer.parseInt(s, 16)); + } else { + String s1 = s.substring(0, index); + String s2 = s.substring(index); + + params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, + params, Integer.parseInt(s1, 16)); + params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, + params, Integer.parseInt(s2, 16)); + } + + { + if (true) { + return LexicalUnitImpl.createUnicodeRange(n.beginLine, + n.beginColumn, prev, params); + } + } + throw new Error("Missing return statement in function"); + } + + final public LexicalUnitImpl url(LexicalUnitImpl prev) + throws ParseException { + Token n; + n = jj_consume_token(URL); + String urlname = n.image.substring(4, n.image.length() - 1).trim(); + { + if (true) { + return LexicalUnitImpl.createURL(n.beginLine, n.beginColumn, + prev, urlname); + } + } + throw new Error("Missing return statement in function"); + } + + /** + * @exception ParseException + * exception during the parse + */ + final public LexicalUnitImpl hexcolor(LexicalUnitImpl prev) + throws ParseException { + Token n; + n = jj_consume_token(HASH); + int r; + LexicalUnitImpl first, params = null; + String s = n.image.substring(1); + + if (s.length() != 3 && s.length() != 6) { + first = null; + { + if (true) { + throw new CSSParseException( + "invalid hexadecimal notation for RGB: " + s, + getLocator()); + } + } + } + { + if (true) { + return LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, + prev, n.image); + } + } + throw new Error("Missing return statement in function"); + } + + float number(char operator, Token n, int lengthUnit) throws ParseException { + String image = n.image; + float f = 0; + + if (lengthUnit != 0) { + image = image.substring(0, image.length() - lengthUnit); + } + f = Float.valueOf(image).floatValue(); + return (operator == '-') ? -f : f; + } + + String skipStatementUntilSemiColon() throws ParseException { + int[] semicolon = { SEMICOLON }; + return skipStatementUntil(semicolon); + } + + String skipStatementUntilLeftBrace() throws ParseException { + int[] lBrace = { LBRACE }; + return skipStatementUntil(lBrace); + } + + String skipStatementUntilMatchingRightParan() throws ParseException { + int[] leftTokens = { LPARAN, FUNCTION }; // a FUNCTION also contains "(" + int[] rightTokens = { RPARAN }; + StringBuffer s = new StringBuffer(); + int difference = 1; + Token tok; + while (difference != 0) { + tok = getToken(1); + if (tok.kind == EOF) { + return null; + } + for (int sym : leftTokens) { + if (tok.kind == sym) { + difference++; + } + } + for (int sym : rightTokens) { + if (tok.kind == sym) { + difference--; + } + } + if (difference != 0) { + if (tok.image != null) { + s.append(tok.image); + } + getNextToken(); + } + } + return s.toString().trim(); + } + + String skipStatementUntil(int[] symbols) throws ParseException { + StringBuffer s = new StringBuffer(); + boolean stop = false; + Token tok; + while (!stop) { + tok = getToken(1); + if (tok.kind == EOF) { + return null; + } + for (int sym : symbols) { + if (tok.kind == sym) { + stop = true; + break; + } + } + if (!stop) { + if (tok.image != null) { + s.append(tok.image); + } + getNextToken(); + } + } + return s.toString().trim(); + } + + String skipStatement() throws ParseException { + StringBuffer s = new StringBuffer(); + Token tok = getToken(0); + if (tok.image != null) { + s.append(tok.image); + } + while (true) { + tok = getToken(1); + if (tok.kind == EOF) { + return null; + } + s.append(tok.image); + if (tok.kind == LBRACE) { + getNextToken(); + s.append(skip_to_matching_brace()); + getNextToken(); + tok = getToken(1); + break; + } else if (tok.kind == RBRACE) { + getNextToken(); + tok = getToken(1); + break; + } else if (tok.kind == SEMICOLON) { + getNextToken(); + tok = getToken(1); + break; + } + getNextToken(); + } + + // skip white space + while (true) { + if (tok.kind != S) { + break; + } + tok = getNextToken(); + tok = getToken(1); + } + + return s.toString().trim(); + } + + String skip_to_matching_brace() throws ParseException { + StringBuffer s = new StringBuffer(); + Token tok; + int nesting = 1; + while (true) { + tok = getToken(1); + if (tok.kind == EOF) { + break; + } + s.append(tok.image); + if (tok.kind == LBRACE) { + nesting++; + } else if (tok.kind == RBRACE) { + nesting--; + if (nesting == 0) { + break; + } + } + getNextToken(); + } + return s.toString(); + } + + String convertStringIndex(String s, int start, int len) + throws ParseException { + StringBuffer buf = new StringBuffer(len); + int index = start; + + while (index < len) { + char c = s.charAt(index); + if (c == '\u005c\u005c') { + if (++index < len) { + c = s.charAt(index); + switch (c) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + buf.append('\u005c\u005c'); + while (index < len) { + buf.append(s.charAt(index++)); + } + break; + case '\u005cn': + case '\u005cf': + break; + case '\u005cr': + if (index + 1 < len) { + if (s.charAt(index + 1) == '\u005cn') { + index++; + } + } + break; + default: + buf.append(c); + } + } else { + throw new CSSParseException("invalid string " + s, + getLocator()); + } + } else { + buf.append(c); + } + index++; + } + + return buf.toString(); + } + + String convertIdent(String s) throws ParseException { + return convertStringIndex(s, 0, s.length()); + } + + String convertString(String s) throws ParseException { + return convertStringIndex(s, 0, s.length()); + } + + void comments() throws ParseException { + /* + * 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) { + documentHandler.comment(tmp_t.image); + tmp_t = tmp_t.next; + } + } + } + + void rejectToken(Token t) throws ParseException { + Token fakeToken = new Token(); + t.next = token; + fakeToken.next = t; + token = fakeToken; + } + + String skipAfterExpression() throws ParseException { + Token t = getToken(1); + StringBuffer s = new StringBuffer(); + s.append(getToken(0).image); + + while ((t.kind != RBRACE) && (t.kind != SEMICOLON) && (t.kind != EOF)) { + s.append(t.image); + getNextToken(); + t = getToken(1); + } + + return s.toString(); + } + + /** + * The following functions are useful for a DOM CSS implementation only and + * are not part of the general CSS2 parser. + */ + // TODO required by original parser but not used by Vaadin? + final public void _parseRule() throws ParseException { + String ret = null; + label_169: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[251] = jj_gen; + break label_169; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case IMPORT_SYM: + importDeclaration(); + break; + case DEBUG_SYM: + case WARN_SYM: + debuggingDirective(); + break; + case PLUS: + case PRECEDES: + case SIBLING: + case LBRACKET: + case ANY: + case PARENT: + case DOT: + case COLON: + case INTERPOLATION: + case IDENT: + case HASH: + styleRule(); + break; + case MEDIA_SYM: + media(); + break; + case PAGE_SYM: + page(); + break; + case FONT_FACE_SYM: + fontFace(); + break; + default: + jj_la1[252] = jj_gen; + ret = skipStatement(); + if ((ret == null) || (ret.length() == 0)) { + { + if (true) { + return; + } + } + } + if (ret.charAt(0) == '@') { + documentHandler.unrecognizedRule(ret); + } else { + { + if (true) { + throw new CSSParseException("unrecognize rule: " + ret, + getLocator()); + } + } + } + } + } + + final public void _parseImportRule() throws ParseException { + label_170: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[253] = jj_gen; + break label_170; + } + jj_consume_token(S); + } + importDeclaration(); + } + + final public void _parseMediaRule() throws ParseException { + label_171: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[254] = jj_gen; + break label_171; + } + jj_consume_token(S); + } + media(); + } + + final public void _parseDeclarationBlock() throws ParseException { + label_172: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[255] = jj_gen; + break label_172; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[256] = jj_gen; + ; + } + label_173: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case SEMICOLON: + ; + break; + default: + jj_la1[257] = jj_gen; + break label_173; + } + jj_consume_token(SEMICOLON); + label_174: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[258] = jj_gen; + break label_174; + } + jj_consume_token(S); + } + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case INTERPOLATION: + case IDENT: + declaration(); + break; + default: + jj_la1[259] = jj_gen; + ; + } + } + } + + final public ArrayList _parseSelectors() throws ParseException { + ArrayList p = null; + try { + label_175: while (true) { + switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) { + case S: + ; + break; + default: + jj_la1[260] = jj_gen; + break label_175; + } + jj_consume_token(S); + } + p = selectorList(); + { + if (true) { + return p; + } + } + } catch (ThrowedParseException e) { + { + if (true) { + throw (ParseException) e.e.fillInStackTrace(); + } + } + } + throw new Error("Missing return statement in function"); + } + + private boolean jj_2_1(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_1(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(0, xla); + } + } + + private boolean jj_2_2(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_2(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(1, xla); + } + } + + private boolean jj_2_3(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_3(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(2, xla); + } + } + + private boolean jj_2_4(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_4(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(3, xla); + } + } + + private boolean jj_2_5(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_5(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(4, xla); + } + } + + private boolean jj_2_6(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_6(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(5, xla); + } + } + + private boolean jj_2_7(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_7(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(6, xla); + } + } + + private boolean jj_2_8(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_8(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(7, xla); + } + } + + private boolean jj_2_9(int xla) { + jj_la = xla; + jj_lastpos = jj_scanpos = token; + try { + return !jj_3_9(); + } catch (LookaheadSuccess ls) { + return true; + } finally { + jj_save(8, xla); + } + } + + private boolean jj_3R_209() { + if (jj_scan_token(MINUS)) { + return true; + } + Token xsp; + if (jj_scan_token(1)) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_188() { + if (jj_3R_210()) { + return true; + } + return false; + } + + private boolean jj_3R_208() { + if (jj_scan_token(PLUS)) { + return true; + } + Token xsp; + if (jj_scan_token(1)) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_207() { + if (jj_scan_token(MOD)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_206() { + if (jj_scan_token(ANY)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_205() { + if (jj_scan_token(DIV)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_204() { + if (jj_scan_token(COMMA)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_185() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_204()) { + jj_scanpos = xsp; + if (jj_3R_205()) { + jj_scanpos = xsp; + if (jj_3R_206()) { + jj_scanpos = xsp; + if (jj_3R_207()) { + jj_scanpos = xsp; + if (jj_3R_208()) { + jj_scanpos = xsp; + if (jj_3R_209()) { + return true; + } + } + } + } + } + } + return false; + } + + private boolean jj_3R_212() { + if (jj_3R_211()) { + return true; + } + return false; + } + + private boolean jj_3R_211() { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(18)) { + jj_scanpos = xsp; + if (jj_scan_token(22)) { + jj_scanpos = xsp; + if (jj_scan_token(23)) { + return true; + } + } + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_191() { + if (jj_scan_token(S)) { + return true; + } + Token xsp; + xsp = jj_scanpos; + if (jj_3R_212()) { + jj_scanpos = xsp; + } + return false; + } + + private boolean jj_3R_210() { + if (jj_scan_token(GUARDED_SYM)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_176() { + if (jj_3R_186()) { + return true; + } + if (jj_scan_token(COLON)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + if (jj_3R_187()) { + return true; + } + xsp = jj_scanpos; + if (jj_3R_188()) { + jj_scanpos = xsp; + } + if (jj_3R_189()) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_189()) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_190() { + if (jj_3R_211()) { + return true; + } + return false; + } + + private boolean jj_3R_177() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_190()) { + jj_scanpos = xsp; + if (jj_3R_191()) { + return true; + } + } + return false; + } + + private boolean jj_3R_194() { + if (jj_scan_token(VARIABLE)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + if (jj_scan_token(COLON)) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_179() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_194()) { + jj_scanpos = xsp; + } + if (jj_scan_token(CONTAINS)) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + if (true) { + jj_la = 0; + jj_scanpos = jj_lastpos; + return false; + } + return false; + } + + private boolean jj_3R_262() { + if (jj_scan_token(HASH)) { + return true; + } + return false; + } + + private boolean jj_3R_279() { + if (jj_scan_token(IDENT)) { + return true; + } + return false; + } + + private boolean jj_3R_280() { + if (jj_scan_token(FUNCTION)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + if (true) { + jj_la = 0; + jj_scanpos = jj_lastpos; + return false; + } + return false; + } + + private boolean jj_3R_278() { + if (jj_scan_token(COLON)) { + return true; + } + return false; + } + + private boolean jj_3R_265() { + if (jj_scan_token(COLON)) { + return true; + } + Token xsp; + xsp = jj_scanpos; + if (jj_3R_278()) { + jj_scanpos = xsp; + } + xsp = jj_scanpos; + if (jj_3R_279()) { + jj_scanpos = xsp; + if (jj_3R_280()) { + return true; + } + } + return false; + } + + private boolean jj_3_7() { + if (jj_3R_183()) { + return true; + } + return false; + } + + private boolean jj_3R_201() { + if (jj_scan_token(LBRACE)) { + return true; + } + return false; + } + + private boolean jj_3R_290() { + if (jj_scan_token(STRING)) { + return true; + } + return false; + } + + private boolean jj_3R_288() { + if (jj_scan_token(STARMATCH)) { + return true; + } + return false; + } + + private boolean jj_3R_287() { + if (jj_scan_token(DOLLARMATCH)) { + return true; + } + return false; + } + + private boolean jj_3R_289() { + if (jj_scan_token(IDENT)) { + return true; + } + return false; + } + + private boolean jj_3R_286() { + if (jj_scan_token(CARETMATCH)) { + return true; + } + return false; + } + + private boolean jj_3R_285() { + if (jj_scan_token(DASHMATCH)) { + return true; + } + return false; + } + + private boolean jj_3R_284() { + if (jj_scan_token(INCLUDES)) { + return true; + } + return false; + } + + private boolean jj_3R_270() { + if (jj_scan_token(INTERPOLATION)) { + return true; + } + return false; + } + + private boolean jj_3R_283() { + if (jj_scan_token(EQ)) { + return true; + } + return false; + } + + private boolean jj_3R_200() { + if (jj_3R_187()) { + return true; + } + return false; + } + + private boolean jj_3R_277() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_283()) { + jj_scanpos = xsp; + if (jj_3R_284()) { + jj_scanpos = xsp; + if (jj_3R_285()) { + jj_scanpos = xsp; + if (jj_3R_286()) { + jj_scanpos = xsp; + if (jj_3R_287()) { + jj_scanpos = xsp; + if (jj_3R_288()) { + return true; + } + } + } + } + } + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + xsp = jj_scanpos; + if (jj_3R_289()) { + jj_scanpos = xsp; + if (jj_3R_290()) { + return true; + } + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3_6() { + if (jj_3R_182()) { + return true; + } + if (jj_scan_token(LBRACE)) { + return true; + } + return false; + } + + private boolean jj_3R_264() { + if (jj_scan_token(LBRACKET)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + if (jj_scan_token(IDENT)) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + xsp = jj_scanpos; + if (jj_3R_277()) { + jj_scanpos = xsp; + } + if (jj_scan_token(RBRACKET)) { + return true; + } + return false; + } + + private boolean jj_3R_183() { + if (jj_3R_199()) { + return true; + } + if (jj_scan_token(COLON)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + xsp = jj_scanpos; + if (jj_3R_200()) { + jj_scanpos = xsp; + if (jj_3R_201()) { + return true; + } + } + return false; + } + + private boolean jj_3R_282() { + if (jj_scan_token(INTERPOLATION)) { + return true; + } + return false; + } + + private boolean jj_3R_268() { + if (jj_3R_187()) { + return true; + } + return false; + } + + private boolean jj_3R_248() { + if (jj_scan_token(PARENT)) { + return true; + } + return false; + } + + private boolean jj_3R_247() { + if (jj_scan_token(ANY)) { + return true; + } + return false; + } + + private boolean jj_3R_261() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_269()) { + jj_scanpos = xsp; + if (jj_3R_270()) { + return true; + } + } + return false; + } + + private boolean jj_3R_269() { + if (jj_scan_token(IDENT)) { + return true; + } + return false; + } + + private boolean jj_3R_213() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_246()) { + jj_scanpos = xsp; + if (jj_3R_247()) { + jj_scanpos = xsp; + if (jj_3R_248()) { + return true; + } + } + } + return false; + } + + private boolean jj_3R_246() { + Token xsp; + if (jj_3R_261()) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_261()) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_254() { + if (jj_scan_token(FUNCTION)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + xsp = jj_scanpos; + if (jj_3R_268()) { + jj_scanpos = xsp; + } + if (jj_scan_token(RPARAN)) { + return true; + } + return false; + } + + private boolean jj_3R_180() { + if (jj_scan_token(COMMA)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_241() { + if (jj_3R_258()) { + return true; + } + return false; + } + + private boolean jj_3R_276() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_281()) { + jj_scanpos = xsp; + if (jj_3R_282()) { + return true; + } + } + return false; + } + + private boolean jj_3R_281() { + if (jj_scan_token(IDENT)) { + return true; + } + return false; + } + + private boolean jj_3R_240() { + if (jj_3R_257()) { + return true; + } + return false; + } + + private boolean jj_3R_239() { + if (jj_3R_256()) { + return true; + } + return false; + } + + private boolean jj_3_5() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_180()) { + jj_scanpos = xsp; + } + if (jj_3R_181()) { + return true; + } + return false; + } + + private boolean jj_3R_263() { + if (jj_scan_token(DOT)) { + return true; + } + Token xsp; + if (jj_3R_276()) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_276()) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_252() { + if (jj_3R_265()) { + return true; + } + return false; + } + + private boolean jj_3R_275() { + if (jj_3R_265()) { + return true; + } + return false; + } + + private boolean jj_3R_273() { + if (jj_3R_263()) { + return true; + } + return false; + } + + private boolean jj_3R_250() { + if (jj_3R_263()) { + return true; + } + return false; + } + + private boolean jj_3R_251() { + if (jj_3R_264()) { + return true; + } + return false; + } + + private boolean jj_3R_274() { + if (jj_3R_264()) { + return true; + } + return false; + } + + private boolean jj_3R_255() { + if (jj_scan_token(DOT)) { + return true; + } + return false; + } + + private boolean jj_3R_271() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_272()) { + jj_scanpos = xsp; + if (jj_3R_273()) { + jj_scanpos = xsp; + if (jj_3R_274()) { + jj_scanpos = xsp; + if (jj_3R_275()) { + return true; + } + } + } + } + return false; + } + + private boolean jj_3R_272() { + if (jj_3R_262()) { + return true; + } + return false; + } + + private boolean jj_3R_238() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_255()) { + jj_scanpos = xsp; + } + xsp = jj_scanpos; + if (jj_scan_token(72)) { + jj_scanpos = xsp; + if (jj_scan_token(49)) { + jj_scanpos = xsp; + if (jj_scan_token(50)) { + jj_scanpos = xsp; + if (jj_scan_token(52)) { + return true; + } + } + } + } + return false; + } + + private boolean jj_3R_237() { + if (jj_scan_token(STRING)) { + return true; + } + return false; + } + + private boolean jj_3R_214() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_249()) { + jj_scanpos = xsp; + if (jj_3R_250()) { + jj_scanpos = xsp; + if (jj_3R_251()) { + jj_scanpos = xsp; + if (jj_3R_252()) { + return true; + } + } + } + } + return false; + } + + private boolean jj_3R_249() { + if (jj_3R_262()) { + return true; + } + return false; + } + + private boolean jj_3R_236() { + if (jj_3R_254()) { + return true; + } + return false; + } + + private boolean jj_3R_196() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_237()) { + jj_scanpos = xsp; + if (jj_3R_238()) { + jj_scanpos = xsp; + if (jj_3R_239()) { + jj_scanpos = xsp; + if (jj_3R_240()) { + jj_scanpos = xsp; + if (jj_3R_241()) { + return true; + } + } + } + } + } + return false; + } + + private boolean jj_3R_193() { + Token xsp; + if (jj_3R_214()) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_214()) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_192() { + if (jj_3R_213()) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_271()) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_178() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_192()) { + jj_scanpos = xsp; + if (jj_3R_193()) { + return true; + } + } + return false; + } + + private boolean jj_3R_243() { + if (jj_3R_211()) { + return true; + } + if (jj_3R_178()) { + return true; + } + return false; + } + + private boolean jj_3R_235() { + if (jj_scan_token(DIMEN)) { + return true; + } + return false; + } + + private boolean jj_3R_234() { + if (jj_scan_token(KHZ)) { + return true; + } + return false; + } + + private boolean jj_3R_233() { + if (jj_scan_token(HZ)) { + return true; + } + return false; + } + + private boolean jj_3R_232() { + if (jj_scan_token(MS)) { + return true; + } + return false; + } + + private boolean jj_3R_231() { + if (jj_scan_token(SECOND)) { + return true; + } + return false; + } + + private boolean jj_3R_230() { + if (jj_scan_token(GRAD)) { + return true; + } + return false; + } + + private boolean jj_3R_229() { + if (jj_scan_token(RAD)) { + return true; + } + return false; + } + + private boolean jj_3R_228() { + if (jj_scan_token(DEG)) { + return true; + } + return false; + } + + private boolean jj_3R_227() { + if (jj_scan_token(EXS)) { + return true; + } + return false; + } + + private boolean jj_3R_226() { + if (jj_scan_token(REM)) { + return true; + } + return false; + } + + private boolean jj_3_2() { + if (jj_3R_177()) { + return true; + } + if (jj_3R_178()) { + return true; + } + return false; + } + + private boolean jj_3R_225() { + if (jj_scan_token(LEM)) { + return true; + } + return false; + } + + private boolean jj_3R_224() { + if (jj_scan_token(EMS)) { + return true; + } + return false; + } + + private boolean jj_3R_198() { + if (jj_scan_token(COMMA)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + if (jj_3R_197()) { + return true; + } + return false; + } + + private boolean jj_3R_242() { + if (jj_3R_178()) { + return true; + } + return false; + } + + private boolean jj_3R_223() { + if (jj_scan_token(PX)) { + return true; + } + return false; + } + + private boolean jj_3R_222() { + if (jj_scan_token(IN)) { + return true; + } + return false; + } + + private boolean jj_3R_197() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_242()) { + jj_scanpos = xsp; + if (jj_3R_243()) { + return true; + } + } + while (true) { + xsp = jj_scanpos; + if (jj_3_2()) { + jj_scanpos = xsp; + break; + } + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_221() { + if (jj_scan_token(PC)) { + return true; + } + return false; + } + + private boolean jj_3R_220() { + if (jj_scan_token(MM)) { + return true; + } + return false; + } + + private boolean jj_3R_219() { + if (jj_scan_token(CM)) { + return true; + } + return false; + } + + private boolean jj_3R_218() { + if (jj_scan_token(PT)) { + return true; + } + return false; + } + + private boolean jj_3R_217() { + if (jj_scan_token(PERCENTAGE)) { + return true; + } + return false; + } + + private boolean jj_3R_203() { + if (jj_3R_245()) { + return true; + } + return false; + } + + private boolean jj_3_1() { + if (jj_3R_176()) { + return true; + } + return false; + } + + private boolean jj_3R_182() { + if (jj_3R_197()) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_198()) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_216() { + if (jj_scan_token(NUMBER)) { + return true; + } + return false; + } + + private boolean jj_3R_215() { + if (jj_3R_253()) { + return true; + } + return false; + } + + private boolean jj_3R_195() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_215()) { + jj_scanpos = xsp; + } + xsp = jj_scanpos; + if (jj_3R_216()) { + jj_scanpos = xsp; + if (jj_3R_217()) { + jj_scanpos = xsp; + if (jj_3R_218()) { + jj_scanpos = xsp; + if (jj_3R_219()) { + jj_scanpos = xsp; + if (jj_3R_220()) { + jj_scanpos = xsp; + if (jj_3R_221()) { + jj_scanpos = xsp; + if (jj_3R_222()) { + jj_scanpos = xsp; + if (jj_3R_223()) { + jj_scanpos = xsp; + if (jj_3R_224()) { + jj_scanpos = xsp; + if (jj_3R_225()) { + jj_scanpos = xsp; + if (jj_3R_226()) { + jj_scanpos = xsp; + if (jj_3R_227()) { + jj_scanpos = xsp; + if (jj_3R_228()) { + jj_scanpos = xsp; + if (jj_3R_229()) { + jj_scanpos = xsp; + if (jj_3R_230()) { + jj_scanpos = xsp; + if (jj_3R_231()) { + jj_scanpos = xsp; + if (jj_3R_232()) { + jj_scanpos = xsp; + if (jj_3R_233()) { + jj_scanpos = xsp; + if (jj_3R_234()) { + jj_scanpos = xsp; + if (jj_3R_235()) { + jj_scanpos = xsp; + if (jj_3R_236()) { + return true; + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return false; + } + + private boolean jj_3R_181() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_195()) { + jj_scanpos = xsp; + if (jj_3R_196()) { + return true; + } + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_256() { + if (jj_scan_token(HASH)) { + return true; + } + return false; + } + + private boolean jj_3_4() { + if (jj_3R_179()) { + return true; + } + return false; + } + + private boolean jj_3R_245() { + if (jj_3R_186()) { + return true; + } + return false; + } + + private boolean jj_3R_257() { + if (jj_scan_token(URL)) { + return true; + } + return false; + } + + private boolean jj_3R_202() { + if (jj_3R_181()) { + return true; + } + return false; + } + + private boolean jj_3R_260() { + if (jj_scan_token(INTERPOLATION)) { + return true; + } + return false; + } + + private boolean jj_3R_184() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_202()) { + jj_scanpos = xsp; + if (jj_3R_203()) { + return true; + } + } + return false; + } + + private boolean jj_3_9() { + if (jj_3R_185()) { + return true; + } + return false; + } + + private boolean jj_3_3() { + if (jj_3R_176()) { + return true; + } + return false; + } + + private boolean jj_3R_267() { + if (jj_scan_token(PLUS)) { + return true; + } + return false; + } + + private boolean jj_3R_253() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_266()) { + jj_scanpos = xsp; + if (jj_3R_267()) { + return true; + } + } + return false; + } + + private boolean jj_3R_266() { + if (jj_scan_token(MINUS)) { + return true; + } + return false; + } + + private boolean jj_3R_258() { + if (jj_scan_token(UNICODERANGE)) { + return true; + } + return false; + } + + private boolean jj_3_8() { + Token xsp; + xsp = jj_scanpos; + if (jj_3_9()) { + jj_scanpos = xsp; + } + if (jj_3R_184()) { + return true; + } + return false; + } + + private boolean jj_3R_186() { + if (jj_scan_token(VARIABLE)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_189() { + if (jj_scan_token(SEMICOLON)) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_187() { + if (jj_3R_184()) { + return true; + } + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3_8()) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + private boolean jj_3R_244() { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_259()) { + jj_scanpos = xsp; + if (jj_3R_260()) { + return true; + } + } + return false; + } + + private boolean jj_3R_259() { + if (jj_scan_token(IDENT)) { + return true; + } + return false; + } + + private boolean jj_3R_199() { + Token xsp; + if (jj_3R_244()) { + return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_244()) { + jj_scanpos = xsp; + break; + } + } + while (true) { + xsp = jj_scanpos; + if (jj_scan_token(1)) { + jj_scanpos = xsp; + break; + } + } + return false; + } + + /** Generated Token Manager. */ + public ParserTokenManager token_source; + /** Current token. */ + public Token token; + /** Next token. */ + public Token jj_nt; + private int jj_ntk; + private Token jj_scanpos, jj_lastpos; + private int jj_la; + private int jj_gen; + final private int[] jj_la1 = new int[261]; + static private int[] jj_la1_0; + static private int[] jj_la1_1; + static private int[] jj_la1_2; + static private int[] jj_la1_3; + static { + jj_la1_init_0(); + jj_la1_init_1(); + jj_la1_init_2(); + jj_la1_init_3(); + } + + private static void jj_la1_init_0() { + jj_la1_0 = new int[] { 0x0, 0x302, 0x302, 0x0, 0x300, 0x2, 0x2, 0x2, + 0xd4c40000, 0x0, 0x300, 0x2, 0x300, 0x2, 0x0, 0x2, 0x2, 0x2, + 0x0, 0x0, 0x2, 0x2, 0x0, 0x0, 0x2, 0x0, 0x2, 0x100000, 0x2, + 0x0, 0x2, 0x2, 0xd4c40000, 0xd4c40000, 0x2, 0x2, 0x2, + 0xd4fd1500, 0xd4fd1500, 0x2, 0x2, 0x2, 0x0, 0x0, 0x2, 0x0, + 0x200000, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x0, 0x200000, 0x2, + 0x0, 0x2, 0x391500, 0xc40000, 0xc40002, 0xc40000, 0x2, 0x2, + 0x80120002, 0x80120002, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x2, + 0xd4c40000, 0xd4c40000, 0x2, 0x100000, 0x2, 0xd4c40000, 0x2, + 0x84000000, 0x84000000, 0x84000000, 0x84000000, 0xd4000000, + 0x0, 0x0, 0x0, 0x0, 0x50000000, 0x2, 0x2, 0x3f000, 0x2, 0x0, + 0x2, 0x3f000, 0x0, 0x2, 0x0, 0x2, 0x0, 0x2, 0x200000, 0x0, + 0xd4c40000, 0x0, 0x134e0002, 0x2, 0xd4c40000, 0xd4c40000, 0x2, + 0x0, 0x2, 0x134e0002, 0x0, 0x2, 0xd4c40000, 0xd4c40000, 0x2, + 0x134e0002, 0x2, 0x2, 0x2, 0x0, 0x2, 0xd4c40000, 0x2, 0x2, + 0x100000, 0x2, 0x2, 0x2, 0x2, 0x0, 0x2, 0xd4c40000, 0xd4c40000, + 0x2, 0x100000, 0x2, 0x2, 0x2, 0x100000, 0x0, 0x0, 0x800c0000, + 0x2, 0x0, 0x100000, 0x2, 0x800c0000, 0x2, 0x0, 0x2, 0x2, 0x0, + 0x2, 0x200000, 0x2, 0xd4c40000, 0xd4c40000, 0x2, 0x200400, 0x2, + 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, 0x2, 0x100000, 0x2, 0x2, 0x2, + 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x100000, 0x2, 0x2, 0x2, 0x0, + 0x2, 0x2, 0x2, 0x100000, 0x2, 0x2, 0x0, 0x2, 0x0, 0x2, 0x2, + 0x2, 0x100000, 0x0, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x200000, + 0x2, 0x2, 0x200000, 0x2, 0x2, 0x0, 0x200000, 0x2, 0x0, 0x2, + 0x0, 0xd4c40000, 0x2, 0x0, 0x2, 0x0, 0x200000, 0x2, 0x0, 0x2, + 0x800c0400, 0x2, 0x0, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, 0x2, + 0x321c0000, 0xc0000, 0x800c0000, 0xc0000, 0x0, 0x80000000, 0x0, + 0x80000000, 0x800c0000, 0x2, 0x2, 0x800c0000, 0x2, 0xd4c40000, + 0x2, 0x2, 0x2, 0x0, 0x200000, 0x2, 0x0, 0x2, }; + } + + private static void jj_la1_init_1() { + jj_la1_1 = new int[] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x566000c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, + 0x80, 0x0, 0x0, 0x120000, 0x120000, 0x0, 0x120000, 0x0, 0x0, + 0x0, 0x120000, 0x0, 0x0, 0x564000c0, 0x564000c0, 0x0, 0x0, 0x0, + 0x60001c0, 0x60001c0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x80, 0x0, + 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x80, 0x0, + 0x100, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc2, 0xc2, 0x0, 0x80, 0x80, + 0x0, 0x0, 0x0, 0x0, 0x564000c0, 0x564000c0, 0x0, 0x0, 0x0, + 0xc0, 0x0, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80, 0x80, 0x80, + 0x80, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x50000000, 0x64000c0, 0x50000000, 0x3f, + 0x0, 0x564000c0, 0x564000c0, 0x0, 0x80000000, 0x0, 0x3f, 0x0, + 0x0, 0x564000c0, 0x564000c0, 0x0, 0x3f, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x564000c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80, 0x0, + 0x564000c0, 0x564000c0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, + 0x40, 0x160040, 0x0, 0x40, 0x0, 0x0, 0x160040, 0x0, 0x40, 0x0, + 0x0, 0x80, 0x0, 0x0, 0x0, 0x61200c0, 0x61200c0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, + 0x6000000, 0x0, 0x0, 0x60000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x80, 0x0, 0x6000000, 0xc0, 0x0, + 0x0, 0x0, 0x80, 0x0, 0x0, 0x80, 0x0, 0x160000, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x160000, 0x0, + 0x0, 0x0, 0x160000, 0x160000, 0x160000, 0x0, 0x0, 0x160000, + 0x0, 0x60000c0, 0x0, 0x0, 0x0, 0x80, 0x0, 0x0, 0x80, 0x0, }; + } + + private static void jj_la1_init_2() { + jj_la1_2 = new int[] { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, + 0x1000, 0x0, 0x0, 0x0, 0x0, 0x880, 0x0, 0x0, 0x0, 0x100, 0x100, + 0x0, 0x0, 0x2008, 0x2008, 0x0, 0x2000, 0x0, 0x0, 0x0, 0x2000, + 0x0, 0x0, 0x1119, 0x1119, 0x0, 0x0, 0x0, 0x2b80, 0x2b80, 0x0, + 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x0, + 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x2a80, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x380, 0x380, 0x0, 0x100, 0x100, 0x0, 0x0, 0x0, 0x0, + 0x1119, 0x1119, 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x0, 0x0, 0x0, 0x0, + 0x180, 0x0, 0x0, 0x0, 0x0, 0x100, 0x0, 0x40, 0x0, 0x0, 0x0, + 0x109, 0x1000, 0x1300, 0x0, 0x1109, 0x1109, 0x0, 0x0, 0x0, + 0x1300, 0x20, 0x0, 0x1109, 0x1109, 0x0, 0x1300, 0x0, 0x0, 0x0, + 0x1100, 0x0, 0x1109, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x100, + 0x0, 0x1109, 0x1109, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, + 0x1000, 0xfffffb80, 0x0, 0x0, 0x0, 0x0, 0xfffffb80, 0x0, 0x0, + 0x0, 0x0, 0x1100, 0x0, 0x0, 0x0, 0x2100, 0x2100, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x100, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, 0x0, 0x0, 0x100, + 0x0, 0x0, 0x100, 0x0, 0xfffffb80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffb80, 0x0, 0xffffe200, 0x0, + 0x100, 0x980, 0xffffeb80, 0x0, 0x0, 0xfffffb80, 0x0, 0x100, + 0x0, 0x0, 0x0, 0x100, 0x0, 0x0, 0x100, 0x0, }; + } + + private static void jj_la1_init_3() { + jj_la1_3 = new int[] { 0x8, 0x80, 0x80, 0x2, 0x80, 0x0, 0x0, 0x0, 0x75, + 0x0, 0x80, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, + 0xc5, 0x0, 0x0, 0x0, 0xc401bf, 0xc401bf, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0xc401be, 0x0, 0x0, 0x0, 0x0, 0x0, 0x400000, + 0x400000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc7, 0xc7, 0x0, + 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x400000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x45, 0x80, 0x200000, 0x0, + 0xe5, 0xe5, 0x0, 0x0, 0x0, 0x200000, 0x0, 0x0, 0xe5, 0xe5, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x400000, 0x0, 0xf5, 0xf5, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x440001, 0x0, 0x0, 0x0, 0x0, 0x440001, 0x0, + 0x0, 0x0, 0x0, 0x400000, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, + 0x0, 0x0, 0x380000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x100, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x440001, 0x0, 0x100, 0x0, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x440001, 0x0, 0x400000, + 0x0, 0x0, 0x40001, 0x440001, 0x0, 0x0, 0x440001, 0x0, 0x37, + 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; + } + + final private JJCalls[] jj_2_rtns = new JJCalls[9]; + private boolean jj_rescan = false; + private int jj_gc = 0; + + /** Constructor with user supplied CharStream. */ + public Parser(CharStream stream) { + token_source = new ParserTokenManager(stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 261; i++) { + jj_la1[i] = -1; + } + for (int i = 0; i < jj_2_rtns.length; i++) { + jj_2_rtns[i] = new JJCalls(); + } + } + + /** Reinitialise. */ + public void ReInit(CharStream stream) { + token_source.ReInit(stream); + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 261; i++) { + jj_la1[i] = -1; + } + for (int i = 0; i < jj_2_rtns.length; i++) { + jj_2_rtns[i] = new JJCalls(); + } + } + + /** Constructor with generated Token Manager. */ + public Parser(ParserTokenManager tm) { + token_source = tm; + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 261; i++) { + jj_la1[i] = -1; + } + for (int i = 0; i < jj_2_rtns.length; i++) { + jj_2_rtns[i] = new JJCalls(); + } + } + + /** Reinitialise. */ + public void ReInit(ParserTokenManager tm) { + token_source = tm; + token = new Token(); + jj_ntk = -1; + jj_gen = 0; + for (int i = 0; i < 261; i++) { + jj_la1[i] = -1; + } + for (int i = 0; i < jj_2_rtns.length; i++) { + jj_2_rtns[i] = new JJCalls(); + } + } + + private Token jj_consume_token(int kind) throws ParseException { + Token oldToken; + if ((oldToken = token).next != null) { + token = token.next; + } else { + token = token.next = token_source.getNextToken(); + } + jj_ntk = -1; + if (token.kind == kind) { + jj_gen++; + if (++jj_gc > 100) { + jj_gc = 0; + for (int i = 0; i < jj_2_rtns.length; i++) { + JJCalls c = jj_2_rtns[i]; + while (c != null) { + if (c.gen < jj_gen) { + c.first = null; + } + c = c.next; + } + } + } + return token; + } + token = oldToken; + jj_kind = kind; + throw generateParseException(); + } + + static private final class LookaheadSuccess extends java.lang.Error { + } + + final private LookaheadSuccess jj_ls = new LookaheadSuccess(); + + private boolean jj_scan_token(int kind) { + if (jj_scanpos == jj_lastpos) { + jj_la--; + if (jj_scanpos.next == null) { + jj_lastpos = jj_scanpos = jj_scanpos.next = token_source + .getNextToken(); + } else { + jj_lastpos = jj_scanpos = jj_scanpos.next; + } + } else { + jj_scanpos = jj_scanpos.next; + } + if (jj_rescan) { + int i = 0; + Token tok = token; + while (tok != null && tok != jj_scanpos) { + i++; + tok = tok.next; + } + if (tok != null) { + jj_add_error_token(kind, i); + } + } + if (jj_scanpos.kind != kind) { + return true; + } + if (jj_la == 0 && jj_scanpos == jj_lastpos) { + throw jj_ls; + } + return false; + } + + /** Get the next Token. */ + final public Token getNextToken() { + if (token.next != null) { + token = token.next; + } else { + token = token.next = token_source.getNextToken(); + } + jj_ntk = -1; + jj_gen++; + return token; + } + + /** Get the specific Token. */ + final public Token getToken(int index) { + Token t = token; + for (int i = 0; i < index; i++) { + if (t.next != null) { + t = t.next; + } else { + t = t.next = token_source.getNextToken(); + } + } + return t; + } + + private int jj_ntk() { + if ((jj_nt = token.next) == null) { + return (jj_ntk = (token.next = token_source.getNextToken()).kind); + } else { + return (jj_ntk = jj_nt.kind); + } + } + + private java.util.List jj_expentries = new java.util.ArrayList(); + private int[] jj_expentry; + private int jj_kind = -1; + private int[] jj_lasttokens = new int[100]; + private int jj_endpos; + + private void jj_add_error_token(int kind, int pos) { + if (pos >= 100) { + return; + } + if (pos == jj_endpos + 1) { + jj_lasttokens[jj_endpos++] = kind; + } else if (jj_endpos != 0) { + jj_expentry = new int[jj_endpos]; + for (int i = 0; i < jj_endpos; i++) { + jj_expentry[i] = jj_lasttokens[i]; + } + jj_entries_loop: for (java.util.Iterator it = jj_expentries + .iterator(); it.hasNext();) { + int[] oldentry = (int[]) (it.next()); + if (oldentry.length == jj_expentry.length) { + for (int i = 0; i < jj_expentry.length; i++) { + if (oldentry[i] != jj_expentry[i]) { + continue jj_entries_loop; + } + } + jj_expentries.add(jj_expentry); + break jj_entries_loop; + } + } + if (pos != 0) { + jj_lasttokens[(jj_endpos = pos) - 1] = kind; + } + } + } + + /** Generate ParseException. */ + public ParseException generateParseException() { + jj_expentries.clear(); + boolean[] la1tokens = new boolean[120]; + if (jj_kind >= 0) { + la1tokens[jj_kind] = true; + jj_kind = -1; + } + for (int i = 0; i < 261; i++) { + if (jj_la1[i] == jj_gen) { + for (int j = 0; j < 32; j++) { + if ((jj_la1_0[i] & (1 << j)) != 0) { + la1tokens[j] = true; + } + if ((jj_la1_1[i] & (1 << j)) != 0) { + la1tokens[32 + j] = true; + } + if ((jj_la1_2[i] & (1 << j)) != 0) { + la1tokens[64 + j] = true; + } + if ((jj_la1_3[i] & (1 << j)) != 0) { + la1tokens[96 + j] = true; + } + } + } + } + for (int i = 0; i < 120; i++) { + if (la1tokens[i]) { + jj_expentry = new int[1]; + jj_expentry[0] = i; + jj_expentries.add(jj_expentry); + } + } + jj_endpos = 0; + jj_rescan_token(); + jj_add_error_token(0, 0); + int[][] exptokseq = new int[jj_expentries.size()][]; + for (int i = 0; i < jj_expentries.size(); i++) { + exptokseq[i] = jj_expentries.get(i); + } + return new ParseException(token, exptokseq, tokenImage); + } + + /** Enable tracing. */ + final public void enable_tracing() { + } + + /** Disable tracing. */ + final public void disable_tracing() { + } + + private void jj_rescan_token() { + jj_rescan = true; + for (int i = 0; i < 9; i++) { + try { + JJCalls p = jj_2_rtns[i]; + do { + if (p.gen > jj_gen) { + jj_la = p.arg; + jj_lastpos = jj_scanpos = p.first; + switch (i) { + case 0: + jj_3_1(); + break; + case 1: + jj_3_2(); + break; + case 2: + jj_3_3(); + break; + case 3: + jj_3_4(); + break; + case 4: + jj_3_5(); + break; + case 5: + jj_3_6(); + break; + case 6: + jj_3_7(); + break; + case 7: + jj_3_8(); + break; + case 8: + jj_3_9(); + break; + } + } + p = p.next; + } while (p != null); + } catch (LookaheadSuccess ls) { + } + } + jj_rescan = false; + } + + private void jj_save(int index, int xla) { + JJCalls p = jj_2_rtns[index]; + while (p.gen > jj_gen) { + if (p.next == null) { + p = p.next = new JJCalls(); + break; + } + p = p.next; + } + p.gen = jj_gen + xla - jj_la; + p.first = token; + p.arg = xla; + } + + static final class JJCalls { + int gen; + Token first; + int arg; + JJCalls next; + } + } diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj new file mode 100644 index 0000000000..5fb7f2315f --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj @@ -0,0 +1,3028 @@ +/* + * 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. + */ +/* -*-java-extended-*- + * Copyright (c) 1999 World Wide Web Consortium + * (Massachusetts Institute of Technology, Institut National de Recherche + * en Informatique et en Automatique, Keio University). + * All Rights Reserved. http://www.w3.org/Consortium/Legal/ + * + * $Id: Parser.jj,v 1.15 2000/10/27 21:09:37 plehegar Exp $ + */ + +options { + IGNORE_CASE = true; + STATIC = false; + USER_CHAR_STREAM = true; + /* DEBUG_TOKEN_MANAGER = true; + DEBUG_PARSER = true; */ +} + +PARSER_BEGIN(Parser) + +package com.vaadin.sass.internal.parser; + +import java.io.*; +import java.net.*; +import java.util.ArrayList; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; + +import org.w3c.css.sac.ConditionFactory; +import org.w3c.css.sac.Condition; +import org.w3c.css.sac.SelectorFactory; +import org.w3c.css.sac.SelectorList; +import org.w3c.css.sac.Selector; +import org.w3c.css.sac.SimpleSelector; +import org.w3c.css.sac.DocumentHandler; +import org.w3c.css.sac.InputSource; +import org.w3c.css.sac.ErrorHandler; +import org.w3c.css.sac.CSSException; +import org.w3c.css.sac.CSSParseException; +import org.w3c.css.sac.Locator; +import org.w3c.css.sac.LexicalUnit; + +import org.w3c.flute.parser.selectors.SelectorFactoryImpl; +import org.w3c.flute.parser.selectors.ConditionFactoryImpl; + +import org.w3c.flute.util.Encoding; + +import com.vaadin.sass.internal.handler.*; + +import com.vaadin.sass.internal.tree.*; + +/** + * A CSS2 parser + * + * @author Philippe Le H�garet + * @version $Revision: 1.15 $ + */ +public class Parser implements org.w3c.css.sac.Parser { + + // replaces all \t, \n, etc with this StringBuffer. + static final StringBuilder SPACE = new StringBuilder(" "); + + // the document handler for the parser + protected SCSSDocumentHandlerImpl documentHandler; + // the error handler for the parser + protected ErrorHandler errorHandler; + // the input source for the parser + protected InputSource source; + + protected ConditionFactory conditionFactory; + protected SelectorFactory selectorFactory; + + // temporary place holder for pseudo-element ... + private String pseudoElt; + + /** + * Creates a new Parser + */ + public Parser() { + this((CharStream) null); + } + + /** + * @@TODO + * @exception CSSException Not yet implemented + */ + public void setLocale(Locale locale) throws CSSException { + throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR); + } + + public InputSource getInputSource(){ + return source; + } + + /** + * Set the document handler for this parser + */ + public void setDocumentHandler(DocumentHandler handler) { + this.documentHandler = (SCSSDocumentHandlerImpl) handler; + } + + public void setSelectorFactory(SelectorFactory selectorFactory) { + this.selectorFactory = selectorFactory; + } + + public void setConditionFactory(ConditionFactory conditionFactory) { + this.conditionFactory = conditionFactory; + } + + /** + * Set the error handler for this parser + */ + public void setErrorHandler(ErrorHandler error) { + this.errorHandler = error; + } + + /** + * Main parse methods + * + * @param source the source of the style sheet. + * @exception IOException the source can't be parsed. + * @exception CSSException the source is not CSS valid. + */ + public void parseStyleSheet(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + + parserUnit(); + } + + /** + * Convenient method for URIs. + * + * @param systemId the fully resolved URI of the style sheet. + * @exception IOException the source can't be parsed. + * @exception CSSException the source is not CSS valid. + */ + public void parseStyleSheet(String systemId) + throws CSSException, IOException { + parseStyleSheet(new InputSource(systemId)); + } + + /** + * This method parses only one rule (style rule or at-rule, except @charset). + * + * @param source the source of the rule. + * @exception IOException the source can't be parsed. + * @exception CSSException the source is not CSS valid. + */ + // TODO required by original parser but not used by Vaadin? + public void parseRule(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + _parseRule(); + } + + /** + * This method parses a style declaration (including the surrounding curly + * braces). + * + * @param source the source of the style declaration. + * @exception IOException the source can't be parsed. + * @exception CSSException the source is not CSS valid. + */ + public void parseStyleDeclaration(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + _parseDeclarationBlock(); + } + + /** + * This methods returns "http://www.w3.org/TR/REC-CSS2". + * @return the string "http://www.w3.org/TR/REC-CSS2". + */ + public String getParserVersion() { + return "http://www.w3.org/TR/REC-CSS2"; + } + + /** + * Parse methods used by DOM Level 2 implementation. + */ + public void parseImportRule(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + _parseImportRule(); + } + + public void parseMediaRule(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + if (selectorFactory == null) { + selectorFactory = new SelectorFactoryImpl(); + } + if (conditionFactory == null) { + conditionFactory = new ConditionFactoryImpl(); + } + _parseMediaRule(); + } + + public SelectorList parseSelectors(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + return null; + } + + public LexicalUnit parsePropertyValue(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + return expr(); + } + + public boolean parsePriority(InputSource source) + throws CSSException, IOException { + this.source = source; + ReInit(getCharStreamWithLurk(source)); + + return prio(); + } + + /** + * Convert the source into a Reader. Used only by DOM Level 2 parser methods. + */ + private Reader getReader(InputSource source) throws IOException { + if (source.getCharacterStream() != null) { + return source.getCharacterStream(); + } else if (source.getByteStream() != null) { + // My DOM level 2 implementation doesn't use this case. + if (source.getEncoding() == null) { + // unknown encoding, use ASCII as default. + return new InputStreamReader(source.getByteStream(), "ASCII"); + } else { + return new InputStreamReader(source.getByteStream(), + source.getEncoding()); + } + } else { + // systemId + // @@TODO + throw new CSSException("not yet implemented"); + } + } + + /** + * Convert the source into a CharStream with encoding informations. + * The encoding can be found in the InputSource or in the CSS document. + * Since this method marks the reader and make a reset after looking for + * the charset declaration, you'll find the charset declaration into the + * stream. + */ + private CharStream getCharStreamWithLurk(InputSource source) + throws CSSException, IOException { + if (source.getCharacterStream() != null) { + // all encoding are supposed to be resolved by the user + // return the reader + return new Generic_CharStream(source.getCharacterStream(), 1, 1); + } else if (source.getByteStream() == null) { + // @@CONTINUE ME. see also getReader() with systemId + try { + source.setByteStream(new URL(source.getURI()).openStream()); + } catch (Exception e) { + try { + source.setByteStream(new FileInputStream(source.getURI())); + } catch (IOException ex) { + throw new CSSException("invalid url ?"); + } + } + } + //use UTF-8 as the default encoding. + String encoding = source.getEncoding(); + InputStream input = source.getByteStream(); + if (!input.markSupported()) { + // If mark is not supported, wrap it in a stream which supports mark + input = new BufferedInputStream(input); + source.setByteStream(input); + } + // Mark either the original stream or the wrapped stream + input.mark(100); + if(encoding == null){ + encoding = "ASCII"; + + char c = ' '; + + c = (char) input.read(); + + if (c == '@') { + // hum, is it a charset ? + int size = 100; + byte[] buf = new byte[size]; + input.read(buf, 0, 7); + String keyword = new String(buf, 0, 7); + if (keyword.equals("charset")) { + // Yes, this is the charset declaration ! + + // here I don't use the right declaration : white space are ' '. + while ((c = (char) input.read()) == ' ') { + // find the first quote + } + char endChar = c; + int i = 0; + + if ((endChar != '"') && (endChar != '\'')) { + // hum this is not a quote. + throw new CSSException("invalid charset declaration"); + } + + while ((c = (char) input.read()) != endChar) { + buf[i++] = (byte) c; + if (i == size) { + byte[] old = buf; + buf = new byte[size + 100]; + System.arraycopy(old, 0, buf, 0, size); + size += 100; + } + } + while ((c = (char) input.read()) == ' ') { + // find the next relevant character + } + if (c != ';') { + // no semi colon at the end ? + throw new CSSException("invalid charset declaration: " + + "missing semi colon"); + } + encoding = new String(buf, 0, i); + if (source.getEncoding() != null) { + // compare the two encoding informations. + // For example, I don't accept to have ASCII and after UTF-8. + // Is it really good ? That is the question. + if (!encoding.equals(source.getEncoding())) { + throw new CSSException("invalid encoding information."); + } + } + } // else no charset declaration available + } + } + // ok set the real encoding of this source. + source.setEncoding(encoding); + // set the real reader of this source. + source.setCharacterStream(new InputStreamReader(source.getByteStream(), + Encoding.getJavaEncoding(encoding))); + // reset the stream (leave the charset declaration in the stream). + input.reset(); + + return new Generic_CharStream(source.getCharacterStream(), 1, 1); + } + + private LocatorImpl currentLocator; + private Locator getLocator() { + if (currentLocator == null) { + currentLocator = new LocatorImpl(this); + return currentLocator; + } + return currentLocator.reInit(this); + } + private LocatorImpl getLocator(Token save) { + if (currentLocator == null) { + currentLocator = new LocatorImpl(this, save); + return currentLocator; + } + return currentLocator.reInit(this, save); + } + + private void reportError(Locator l, Exception e) { + if (errorHandler != null) { + if (e instanceof ParseException) { + // construct a clean error message. + ParseException pe = (ParseException) e; + if (pe.specialConstructor) { + StringBuffer errorM = new StringBuffer(); + if (pe.currentToken != null) { + errorM.append("encountered \"") + .append(pe.currentToken.next); + } + errorM.append('"'); + if (pe.expectedTokenSequences.length != 0) { + errorM.append(". Was expecting one of: "); + for (int i = 0; i < pe.expectedTokenSequences.length; i++) { + for (int j = 0; j < pe.expectedTokenSequences[i].length; j++) { + int kind = pe.expectedTokenSequences[i][j]; + if (kind != S) { + errorM.append(pe.tokenImage[kind]); + errorM.append(' '); + } + } + } + } + errorHandler.error(new CSSParseException(errorM.toString(), + l, e)); + } else { + errorHandler.error(new CSSParseException(e.getMessage(), + l, e)); + } + } else if (e == null) { + errorHandler.error(new CSSParseException("error", l, null)); + } else { + errorHandler.error(new CSSParseException(e.getMessage(), l, e)); + } + } + } + + private void reportWarningSkipText(Locator l, String text) { + if (errorHandler != null && text != null) { + errorHandler.warning(new CSSParseException("Skipping: " + text, l)); + } + } +} + +PARSER_END(Parser) + +/* + * The tokenizer + */ + + +TOKEN : +{ + < S : ( [ " ", "\t" , "\n" , "\r", "\f" ] )+ > + { image = Parser.SPACE; } +} + +/* + * 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 + */ + +SPECIAL_TOKEN : { +< SINGLE_LINE_COMMENT: "//"(~["\n","\r"])* ("\n"|"\r"|"\r\n")? > } + + +MORE : +{ + <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT +| + "/*" : IN_MULTI_LINE_COMMENT +} + +SPECIAL_TOKEN : +{ + : DEFAULT +} + + +SKIP : +{ + : DEFAULT +} + + +MORE : +{ + < ~[] > +} + + +TOKEN : +{ + < CDO : "" > + | < LBRACE : "{" > + | < RBRACE : "}"> + | < DASHMATCH : "|=" > + | < CARETMATCH : "^=" > + | < DOLLARMATCH : "$=" > + | < STARMATCH : "*=" > + | < INCLUDES : "~=" > + | < EQ : "=" > + | < PLUS : "+" > + | < MINUS : "-" > + | < COMMA : "," > + | < SEMICOLON : ";" > + | < PRECEDES : ">" > + | < SIBLING : "~" > + | < SUCCEEDS : "<" > + | < DIV : "/" > + | < LBRACKET : "[" > + | < RBRACKET : "]" > + | < ANY : "*" > + | < MOD : "%" > + | < PARENT : "&" > + | < DOT : "." > + | < LPARAN : "(" > + | < RPARAN : ")"> + | < COMPARE : "==" > + | < OR : "||" > + | < AND : "&&" > + | < NOT_EQ : "!=" > +} + + +TOKEN : +{ + < COLON : ":" > +} + +< DEFAULT > +TOKEN : +{ + < INTERPOLATION : "#{"< VARIABLE > "}"> +} + + +TOKEN : /* basic tokens */ +{ + < NONASCII : ["\200"-"\377"] > + | < #H : ["0"-"9", "a"-"f"] > + | < #UNICODE : "\\" ( )? /* I can't say {1,6} */ + ( )? ( )? + ( )? ( )? + ( [ " ", "\t" , "\n" , "\r", "\f" ] )? > + | < #ESCAPE : | ( "\\" [ " "-"~","\200"-"\377" ] ) > + | < #NMSTART : ("-")?[ "a"-"z","_"] | | > + | < #NMCHAR : ["a"-"z", "0"-"9", "-", "_"] | | > + | < #STRINGCHAR : [ "\t"," ","!","#","$","%","&","("-"~" ] + | "\\\n" | "\\\r\n" | "\\\r" | "\\\f" + | | > + | < #D : ["0"-"9"] > + | < #NAME : ( )+ > + +} + + +TOKEN : +{ + + | + | + | +} + +/* DERECTIVES */ + +TOKEN : +{ + + | + | + | + | + | + | + | + | + | + | + | + | + | + | +} + +< DEFAULT > +TOKEN: +{ + < MICROSOFT_RULE : "filter"|"-ms-filter" > +} + +< DEFAULT > +TOKEN: +{ + < IF : "if" > +} + + +TOKEN: +{ + < GUARDED_SYM : "!" ( )? "default"> +} + + +TOKEN : +{ + < STRING : ( "\"" ( | "'" )* "\"" ) | + ( "'" ( | "\"" )* "'" ) > + | < IDENT : ( )* > + | < NUMBER : ( )+ | ( )* "." ( )+ > + | < #_URL : [ "!","#","$","%","&","*"-"~" ] | | > + | < URL : "url(" ( )* + ( | ( <_URL> )* ) ( )* ")" > +} + + +TOKEN: +{ + < VARIABLE : "$" > +} + + +TOKEN : +{ + < PERCENTAGE : "%" > + | < PT : "pt" > + | < MM : "mm" > + | < CM : "cm" > + | < PC : "pc" > + | < IN : "in" > + | < PX : "px" > + | < EMS : "em" > + | < LEM : "lem" > + | < REM : "rem" > + | < EXS : "ex" > + | < DEG : "deg" > + | < RAD : "rad" > + | < GRAD : "grad" > + | < MS : "ms" > + | < SECOND : "s" > + | < HZ : "Hz" > + | < KHZ : "kHz" > + | < DIMEN : > +} + + +TOKEN : +{ + < HASH : "#" > +} + +/* RESERVED ATRULE WORDS */ + +TOKEN : +{ + < IMPORT_SYM : "@import"> + | < MEDIA_SYM : "@media" > + | < CHARSET_SYM : "@charset" > + | < PAGE_SYM : "@page" > + | < FONT_FACE_SYM: "@font-face" > + | < KEY_FRAME_SYM: "@keyframes" | "@-moz-keyframes" | "@-o-keyframes" | "@-webkit-keyframes" | "@-ms-keyframes"> + | < ATKEYWORD : "@" > +} + + +TOKEN : +{ + < IMPORTANT_SYM : "!" ( )? "important" > +} + + +TOKEN : +{ + < #RANGE0 : > + | < #RANGE1 : ( "?" )? > + | < #RANGE2 : ( "?" )? ( "?" )? > + | < #RANGE3 : ( "?" )? ( "?" )? ( "?" )? > + | < #RANGE4 : ( "?" )? ( "?" )? ( "?" )? ( "?" )? > + | < #RANGE5 : ( "?" )? ( "?" )? ( "?" )? ( "?" )? ( "?" )? > + | < #RANGE6 : "?" ( "?" )? ( "?" )? ( "?" )? ( "?" )? ( "?" )? > + | < #RANGE : | | + | | | | > + | < #UNI : ( )? ( )? ( )? ( )? ( )? > + | < UNICODERANGE : "U+" + | "U+" "-" > +} + +< DEFAULT > +TOKEN : +{ + < REMOVE : "remove" (< S >)? "(" > + | < APPEND : "append" (< S >)? "(" > + | < CONTAINS : "contains" (< S >)? "(" > +} + + +TOKEN : +{ + < FUNCTION : (< S >)* "(" > +} + + +TOKEN : +{ /* avoid token manager error */ + < UNKNOWN : ~[] > +} + +/* + * The grammar of CSS2 + */ + +/** + * The main entry for the parser. + * + * @exception ParseException exception during the parse + */ +void parserUnit() : +{} +{ + try { + { documentHandler.startDocument(source); } + ( charset() )? + ( comments() + | ignoreStatement() )* + ( importDeclaration() ( ignoreStatement() ( )* )* )* + afterImportDeclaration() + + } finally { + documentHandler.endDocument(source); + } +} + +void charset() : +{ Token n; } +{ + try { + ( )* n= ( )* ";" + } catch (ParseException e) { + reportError(getLocator(e.currentToken.next), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + } catch (Exception e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + } +} + +void afterImportDeclaration() : +{String ret; + Locator l; +} +{ + ( + ( debuggingDirective() | mixinDirective() | controlDirective() | includeDirective() | styleRule() | media() + | page() | fontFace() | keyframes() | LOOKAHEAD(variable()) variable() | listModifyDirective() + | { l = getLocator(); } ret=skipStatement() + { + if ((ret == null) || (ret.length() == 0)) { + return; + } + if (ret.charAt(0) == '@') { + documentHandler.unrecognizedRule(ret); + } else { + reportWarningSkipText(l, ret); + } + } + ) + ( ignoreStatement() ( )* )* )* +} + +void ignoreStatement() : +{} +{ + | | atRuleDeclaration() +} + +/** + * The import statement + * + * @exception ParseException exception during the parse + */ +void importDeclaration() : +{Token n; + String uri; + MediaListImpl ml = new MediaListImpl(); + boolean isURL = false; +} +{ + try { + + ( )* ( n= { uri = convertStringIndex(n.image, 1, + n.image.length() -1); } + | n= + { + isURL=true; + uri = n.image.substring(4, n.image.length()-1).trim(); + if ((uri.charAt(0) == '"') + || (uri.charAt(0) == '\'')) { + uri = uri.substring(1, uri.length()-1); + } + } + ) + ( )* mediaStatement(ml) ";" + ( )* + { + if (ml.getLength() == 0) { + // see section 6.3 of the CSS2 recommandation. + ml.addItem("all"); + } + documentHandler.importStyle(uri, ml, isURL); + } + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + } +} + +/** + * @exception ParseException exception during the parse + */ +void keyframes() : +{ + Token n; + boolean start = false; + String keyframeName = null; + String animationname = ""; +} +{ + try { + n= ( )* {keyframeName = n.image;} + (n = {animationname += n.image; }|n = < INTERPOLATION >{ animationname += n.image; })+()* + {start = true; documentHandler.startKeyFrames(keyframeName, animationname); } + ( )* ( keyframeSelector() | contentDirective() )* ( )* + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + } finally { + if (start) { + documentHandler.endKeyFrames(); + } + } +} + +void keyframeSelector(): +{ + Token n; + String selector = ""; + boolean start = false; +} +{ + try{ + (n = | n = | n = ){selector += n.image;} ()* + ( ()* (n = | n = | n = ) {selector += (", " + n.image);} ()* )* + ()* + { + start = true; + documentHandler.startKeyframeSelector(selector); + } + (ifContentStatement() | microsoftExtension() )* + ()* + } + catch (ThrowedParseException e) { + if (errorHandler != null) { + LocatorImpl li = new LocatorImpl(this, + e.e.currentToken.next.beginLine, + e.e.currentToken.next.beginColumn-1); + reportError(li, e.e); + } + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + } catch (TokenMgrError e) { + reportWarningSkipText(getLocator(), skipStatement()); + } finally { + if (start) { + documentHandler.endKeyframeSelector(); + } + } +} + +/** + * @exception ParseException exception during the parse + */ +/* see http://www.w3.org/TR/css3-mediaqueries/ */ +void media() : +{ + boolean start = false; + String ret; + MediaListImpl ml = new MediaListImpl(); +} +{ + try { + ( )* + mediaStatement(ml) + { start = true; documentHandler.startMedia(ml); } + ( )* ( debuggingDirective() | styleRule() | skipUnknownRule() )* ( )* + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + } finally { + if (start) { + documentHandler.endMedia(ml); + } + } +} + +void mediaStatement(MediaListImpl ml) : +{ + Token t; +} +{ + { + t = getToken(1); + // loop over comma separated parts, add each to ml + while ((t.kind != LBRACE) && (t.kind != EOF) && (t.kind != SEMICOLON)) { + StringBuffer s = new StringBuffer(); + s.append(getToken(0).image); + while ((t.kind != COMMA) && (t.kind != LBRACE) && (t.kind != EOF) && (t.kind != SEMICOLON)) { + s.append(t.image); + getNextToken(); + t = getToken(1); + } + if (t.kind == COMMA) { + // skip the comma and the token before it that is still the active token + getNextToken(); + getNextToken(); + t = getToken(1); + } + String str = s.toString().trim(); + if (str.length() > 0) { + ml.addItem(str); + } + } + } +} + +/** + * @exception ParseException exception during the parse + */ +String medium() : /* tv, projection, screen, ... */ +{Token n;} +{ + n= { return convertIdent(n.image); } +} + +/** + * @exception ParseException exception during the parse + */ +void page() : +{ + boolean start = false; + Token n = null; + String page = null; + String pseudo = null; +} +{ + try { + ( )* ( n= ( )* )? + ( pseudo=pseudo_page() )? + { + if (n != null) { + page = convertIdent(n.image); + } + } + ()* + { + start = true; + documentHandler.startPage(page, pseudo); + } + ( declaration() )? ( ";" ( )* ( declaration() )? )* + ()* + } catch (ParseException e) { + if (errorHandler != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn-1); + reportError(li, e); + skipStatement(); + // reportWarningSkipText(li, skipStatement()); + } else { + skipStatement(); + } + } finally { + if (start) { + documentHandler.endPage(page, pseudo); + } + } +} + +String pseudo_page() : +{ Token n; } +{ + ":" n= ( )* { return convertIdent(n.image); } +} + +void fontFace() : +{ + boolean start = false; +} +{ + try { + ( )* + ()* + { start = true; documentHandler.startFontFace(); } + ( declaration() )? ( ";" ( )* ( declaration() )? )* + ()* + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + } finally { + if (start) { + documentHandler.endFontFace(); + } + } +} + +/** + * @exception ParseException exception during the parse + */ +void atRuleDeclaration() : +{Token n; + String ret; +} +{ + n= + { + ret=skipStatement(); + if ((ret != null) && (ret.charAt(0) == '@')) { + documentHandler.unrecognizedRule(ret); + } else { + reportWarningSkipText(getLocator(), ret); + } + } +} + +void skipUnknownRule() : +{ Token n;} +{ + ( n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n= +| n=";" +| n="-" +| n= + ) { + String ret; + Locator loc = getLocator(); + ret=skipStatement(); + if ((ret != null) && (n.image.charAt(0) == '@')) { + documentHandler.unrecognizedRule(ret); + } else { + reportWarningSkipText(loc, ret); + } + } +} + +/** + * @exception ParseException exception during the parse + */ +char combinator() : +{ +char connector = ' '; +} +{ + (connector = combinatorChar() + | (connector = combinatorChar())?) { return connector; } +} + +/**to refactor combinator and reuse in selector().*/ +char combinatorChar() : +{Token t;} +{ + (t = | t = | t = ) ()* + { + return t.image.charAt(0); + } +} + +void microsoftExtension() : +{ + Token n; + String name = ""; + String value = ""; +} + +{ + // This is not really taking the syntax of filter rules into account + n = < MICROSOFT_RULE > (< S >)* { name = n.image; } + < COLON > + ((n = < IDENT > { value += n.image; }) + | (n = < NUMBER > { value += n.image; }) + | (n = < STRING > { value += n.image; }) + | (n = < COMMA > { value += n.image; }) + | (n = < INTERPOLATION > { value += n.image; }) + | (n = < COLON > { value += n.image; }) + | (n = < FUNCTION > { value += n.image; }) + | (n = < RPARAN > { value += n.image; }) + | (n = < EQ > { value += n.image; }) + | (n = < DOT > { value += n.image; }) + | (n = < S > { if(value.lastIndexOf(' ') != value.length()-1) + { value += n.image; } } + ) )+ + < SEMICOLON > + (< S >)* + { documentHandler.microsoftDirective(name, value); } +} + +/** + * @exception ParseException exception during the parse + */ +String property() : +{Token t;String s = ""; +} +{ + (t = {s += t.image; }|t = < INTERPOLATION >{ s += t.image; })+(< S >)* + { + return s; + } +} + +String variableName() : +{Token n;} +{ + n= ()* {return convertIdent(n.image.substring(1));} +} + +String functionName() : +{Token n;} +{ + n= ( )* {return convertIdent(n.image.substring(0, n.image.length()-1));} +} +/** + * @exception ParseException exception during the parse + */ +void styleRule() : +{ + boolean start = false; + ArrayList l = null; + Token save; + Locator loc; +} +{ + try { + l=selectorList() { save = token; } ()* + { + start = true; + documentHandler.startSelector(l); + } + // a CSS import here will not work + ( ifContentStatement() | microsoftExtension() | importDeclaration() )* + ()* + } catch (ThrowedParseException e) { + if (errorHandler != null) { + LocatorImpl li = new LocatorImpl(this, + e.e.currentToken.next.beginLine, + e.e.currentToken.next.beginColumn-1); + reportError(li, e.e); + } + } catch (ParseException e) { + reportError(getLocator(), e); + skipStatement(); + // reportWarningSkipText(getLocator(), skipStatement()); + } catch (TokenMgrError e) { + reportWarningSkipText(getLocator(), skipStatement()); + } finally { + if (start) { + documentHandler.endSelector(); + } + } +} + + ArrayList selectorList() : +{ + ArrayList selectors = new ArrayList(); + String selector; +} +{ + selector=selector() ( ()* { selectors.add(selector); } + selector=selector() )* + { selectors.add(selector); + return selectors; + } +} + +/** + * @exception ParseException exception during the parse + */ +String selector() : +{ + String selector = null; + char comb; +} +{ + try { + // the selector can begin either a simple_selector, or a combinatorChar(+, >, ~). + // when beginning with combinatorChar, the next one should be a simple_selector(). + (selector=simple_selector(null, ' ') | (comb=combinatorChar() selector=simple_selector(selector, comb))) + ( LOOKAHEAD(2) comb=combinator() + selector=simple_selector(selector, comb) )* ()* + { + return selector; + } + } catch (ParseException e) { + /* + Token t = getToken(1); + StringBuffer s = new StringBuffer(); + s.append(getToken(0).image); + while ((t.kind != COMMA) && (t.kind != SEMICOLON) + && (t.kind != LBRACE) && (t.kind != EOF)) { + s.append(t.image); + getNextToken(); + t = getToken(1); + } + reportWarningSkipText(getLocator(), s.toString()); + */ + Token t = getToken(1); + while ((t.kind != COMMA) && (t.kind != SEMICOLON) + && (t.kind != LBRACE) && (t.kind != EOF)) { + getNextToken(); + t = getToken(1); + } + + throw new ThrowedParseException(e); + } +} + +/** + * @exception ParseException exception during the parse + */ +String simple_selector(String selector, char comb) : +{ + String simple_current = null; + String cond = null; + + pseudoElt = null; +} +{ + ( (simple_current=element_name() + ( cond=hash(cond) | cond=_class(cond) + | cond=attrib(cond) | cond=pseudo(cond) )* ) + | ( cond = hash(cond) | cond=_class(cond) + | cond=attrib(cond) | cond=pseudo(cond) )+ + ) + { + if (simple_current == null) { + simple_current = ""; + } + if (cond != null) { + simple_current = simple_current + cond; + } + StringBuilder builder = new StringBuilder(); + switch (comb) { + case ' ': + if(selector!=null){ + builder.append(selector).append(" "); + } + break; + case '+': + case '>': + case '~': + if(selector!=null){ + builder.append(selector).append(" "); + } + builder.append(comb).append(" "); + break; + default: + throw new ParseException("invalid state. send a bug report"); + } + builder.append(simple_current); + selector = builder.toString(); + + if (pseudoElt != null) { + selector = selector + pseudoElt; + } + return selector; + } +} + +/** + * @exception ParseException exception during the parse + */ +String _class(String pred) : +{Token t; +String s = "."; +} +{ + "." (t = {s += t.image; }|t = < INTERPOLATION >{ s += t.image; })+ + { + + if (pred == null) { + return s; + } else { + return pred + s; + } + } +} + +/** + * @exception ParseException exception during the parse + */ +String element_name() : +{Token t; String s = "";} +{ + (t = {s += t.image; }|t = < INTERPOLATION >{ s += t.image; })+ + { + return s; + } + | "*" + { return "*"; } + | "&" + { return "&"; } +} + +/** + * @exception ParseException exception during the parse + */ +String attrib(String pred) : +{ + int cases = 0; + Token att = null; + Token val = null; + String attValue = null; +} +{ + "[" ( )* att= ( )* + ( ( "=" { cases = 1; } + | { cases = 2; } + | { cases = 3; } + | { cases = 4; } + | { cases = 5; } + | { cases = 6; } ) ( )* + ( val= { attValue = val.image; } + | val= { attValue = val.image; } + ) + ( )* )? + "]" + { + String name = convertIdent(att.image); + String c; + switch (cases) { + case 0: + c = name; + break; + case 1: + c = name + "=" + attValue; + break; + case 2: + c = name + "~=" + attValue; + break; + case 3: + c = name + "|=" +attValue; + break; + case 4: + c = name + "^=" +attValue; + break; + case 5: + c = name + "$=" +attValue; + break; + case 6: + c = name + "*=" +attValue; + break; + default: + // never reached. + c = null; + } + c = "[" + c + "]"; + if (pred == null) { + return c; + } else { + return pred + c; + } + } +} + +/** + * @exception ParseException exception during the parse + */ +String pseudo(String pred) : +{Token n; +Token param; +String d; +boolean isPseudoElement = false; +} +{ + ":" (":"{isPseudoElement=true;})?( n= + { + String s = ":" + convertIdent(n.image); + if (isPseudoElement) { + if (pseudoElt != null) { + throw new CSSParseException("duplicate pseudo element definition " + + s, getLocator()); + } else { + pseudoElt = ":"+s; + return pred; + } + } else { + String c = s; + if (pred == null) { + return c; + } else { + return pred + c; + } + } + } + | ( n= ( )* d=skipStatementUntilMatchingRightParan() + { + // accept anything between function and a right parenthesis + String f = convertIdent(n.image); + String colons = isPseudoElement ? "::" : ":"; + String pseudofn = colons + f + d + ")"; + if (pred == null) { + return pseudofn; + } else { + return pred + pseudofn; + } + } + ) + ) +} + +/** + * @exception ParseException exception during the parse + */ +String hash(String pred) : +{Token n; } +{ + n= + { + String d = n.image; + if (pred == null) { + return d; + } else { + return pred + d; + } + } +} + +void variable() : +{ + String name; + LexicalUnitImpl exp = null; + boolean guarded = false; + String raw; +} +{ + try{ + name = variableName() + ":" ( )* exp=expr() ( guarded=guarded() )?(";"()*)+ + //raw=skipStatementUntilSemiColon() + { + documentHandler.variable(name, exp, guarded); + } + }catch (JumpException e) { + skipAfterExpression(); + } catch (NumberFormatException e) { + if (errorHandler != null) { + errorHandler.error(new CSSParseException("Invalid number " + + e.getMessage(), + getLocator(), + e)); + } + reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (ParseException e) { + if (errorHandler != null) { + if (e.currentToken != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn-1); + reportError(li, e); + } else { + reportError(getLocator(), e); + } + skipAfterExpression(); + } else { + skipAfterExpression(); + } + } +} + +void controlDirective() : +{} +{ + ifDirective() | eachDirective() +} + +void ifContentStatement() : +{} +{ + contentDirective() | includeDirective() | media() | extendDirective() | styleRuleOrDeclarationOrNestedProperties() + | keyframes() | LOOKAHEAD(variable()) variable() | listModifyDirective() | controlDirective() | atRuleDeclaration() +} + +void ifDirective() : +{ + Token n = null; + String s = null; + String evaluator = ""; +} +{ + < IF_SYM > + ( s = booleanExpressionToken() { evaluator += s;} )+ + < LBRACE >(< S >)* + { documentHandler.startIfElseDirective(); + documentHandler.ifDirective(evaluator); + } + ( ifContentStatement() | fontFace() )* + < RBRACE >(< S >)* + (elseDirective())* + { documentHandler.endIfElseDirective(); } +} + +void elseDirective() : +{ + String evaluator = ""; + Token n = null; + String s = null; +} +{ + < ELSE_SYM >(< S >)* + ( < IF > ( s = booleanExpressionToken() { evaluator += s; } )+ )? + < LBRACE >(< S >)* + { if(!evaluator.trim().equals("")){ documentHandler.ifDirective(evaluator); } + else{ documentHandler.elseDirective(); } + } + ( ifContentStatement() | fontFace() )* + < RBRACE >(< S >)* +} + +String booleanExpressionToken() : +{ + Token n = null; + String s = null; +} +{ + ( + LOOKAHEAD(containsDirective()) + s = containsDirective() + |n = < VARIABLE > + |n = < IDENT > + |n = < NUMBER > + |n = < LPARAN > + |n = < RPARAN > + |n = < PLUS > + |n = < MINUS > + |n = < DIV > + |n = < ANY > + |n = < COMPARE > + |n = < EQ > + |n = < PRECEDES > + |n = < SUCCEEDS > + |n = < OR > + |n = < AND > + |n = < S > + |n = < NOT_EQ > +){ + if(n!=null){return n.image;} + else{return s;} + } +} + +void eachDirective() : +{ + Token var; + ArrayList list = null; + String listVariable = null; +} +{ + < EACH_SYM > + (< S >)* + var = < VARIABLE > (< S >)* < EACH_IN > (< S >)* + (list = stringList() + {documentHandler.startEachDirective(var.image, list);} + |listVariable = variableName() + {documentHandler.startEachDirective(var.image, listVariable);} + ) + < LBRACE >(< S >)* + ( ifContentStatement() )* + < RBRACE >(< S >)* + { documentHandler.endEachDirective();} +} + +ArrayList stringList(): +{ + ArrayList strings = new ArrayList(); + Token input; +} +{ + (input = < IDENT > (< S >)*) + { strings.add(input.image); } + + (< COMMA >(< S >)* input = < IDENT > { strings.add(input.image); } (< S >)*)* + { return strings; } + +} + +void mixinDirective() : +{ + String name; + ArrayList args = null; + String body; +} +{ + + ()* + (name = property() + |(name = functionName() + args = arglist()) ()*) ()* + {documentHandler.startMixinDirective(name, args);} + ( ifContentStatement() | fontFace() | page())* + ()* + {documentHandler.endMixinDirective(name, args);} +} + +ArrayList arglist() : +{ + ArrayList args = new ArrayList(); + VariableNode arg; + boolean hasNonOptionalArgument = false; +} +{ + arg=mixinArg() ( ()* { hasNonOptionalArgument = checkMixinForNonOptionalArguments(arg, hasNonOptionalArgument); args.add(arg); } + arg=mixinArg() )* + { hasNonOptionalArgument = checkMixinForNonOptionalArguments(arg, hasNonOptionalArgument); args.add(arg); + return args; + } +} + +JAVACODE +boolean checkMixinForNonOptionalArguments(VariableNode arg, boolean hasNonOptionalArguments) { + boolean currentArgHasArguments = arg.getExpr() != null && arg.getExpr().getLexicalUnitType() == LexicalUnitImpl.SCSS_VARIABLE && arg.getExpr().getNextLexicalUnit() != null; + if(currentArgHasArguments) { + if(hasNonOptionalArguments) { throw new ParseException("Sass Error: Required argument $"+ arg.getName() +" must come before any optional arguments."); + } + return hasNonOptionalArguments; + }else { return true; + } +} + +VariableNode mixinArg() : +{ + String name; + Token variable = null; + LexicalUnitImpl first = null; + LexicalUnitImpl prev = null; + LexicalUnitImpl next = null; +} +{ + name=variableName() (< COLON > (< S >)* + + ( first = nonVariableTerm(null) { + prev = first; } + (LOOKAHEAD(3)(< COMMA >(< S >)*)? prev = nonVariableTerm(prev))* ) + | (variable = < VARIABLE >{ first = LexicalUnitImpl.createVariable(token.beginLine, token.beginColumn, + prev, variable.image);} + + ) + )? + { + VariableNode arg = new VariableNode(name, first, false); + return arg; + } +} + +ArrayList argValuelist() : +{ + ArrayList args = new ArrayList(); + LexicalUnitImpl first = null; + LexicalUnitImpl next = null; + LexicalUnitImpl prev = null; +} +{ + first = term(null) { args.add(first); prev = first;}((< COLON > (< S >)*)?next=term(prev){prev.setNextLexicalUnit(next); prev = next;})* + ( ()* + first = term(null) { args.add(first); prev = first;}((< COLON > (< S >)*)?next=term(prev){prev.setNextLexicalUnit(next); prev = next;})* + )* + {return args;} +} + +void includeDirective() : +{ + String name; + ArrayList args=null; +} +{ + + ()* + (name = property()|name = variableName(){ name = "$"+name;} + |(name = functionName() + args = argValuelist()) ()*) + ((";"()*)+ + {documentHandler.includeDirective(name, args);} + | ()* {documentHandler.startIncludeContentBlock(name, args);} + (styleRuleOrDeclarationOrNestedProperties() | keyframeSelector())* + ()* {documentHandler.endIncludeContentBlock();} + ) +} + +String interpolation() : +{ + Token n; +} +{ + n = < INTERPOLATION > + { + return n.image; + } +} + +void listModifyDirective() : +{ + String list = null; + String remove = null; + String separator = null; + String variable = null; + Token n = null; + Token type = null; +} +{ + //refactor, remove those 3 LOOKAHEAD(5). + n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)* + (type = < APPEND> | type = | type= )(< S >)* + (list = listModifyDirectiveArgs(0)) + (< RPARAN >)? < COMMA >(< S >)* + (remove = listModifyDirectiveArgs(1)) + ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)? + < RPARAN > + { + switch (type.kind) { + case APPEND: + documentHandler.appendDirective(variable,list,remove,separator); + break; + case REMOVE: + documentHandler.removeDirective(variable,list,remove,separator); + break; + case CONTAINS: + if(variable == null){ + variable = "$var_"+UUID.randomUUID(); + } + documentHandler.containsDirective(variable,list,remove,separator); + break; + default: + break; + } + } + (< S >)*< SEMICOLON >()* +} + + +/** + * @exception ParseException exception during the parse + */ +void appendDirective() : +{ + String list = null; + String remove = null; + String separator = null; + String variable = null; + Token n = null; +} +{ + n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)* + < APPEND >(< S >)* + (list = listModifyDirectiveArgs(0)) + (< RPARAN >)? < COMMA >(< S >)* + (remove = listModifyDirectiveArgs(1)) + ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)? + < RPARAN > + + { documentHandler.appendDirective(variable,list,remove,separator); } +} + +/** + * @exception ParseException exception during the parse + */ +void removeDirective() : +{ + String list = null; + String remove = null; + String separator = null; + String variable = null; + Token n = null; +} +{ + n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)* + < REMOVE >(< S >)* + (list = listModifyDirectiveArgs(0)) + (< RPARAN >)? < COMMA >(< S >)* + (remove = listModifyDirectiveArgs(1)) + ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)? + < RPARAN > + + { documentHandler.removeDirective(variable,list,remove,separator); } +} + +/** + * @exception ParseException exception during the parse + */ +String containsDirective() : +{ + String list = null; + String remove = null; + String separator = null; + String variable = null; + Token n = null; +} +{ + (n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)*)? + < CONTAINS >(< S >)* + (list = listModifyDirectiveArgs(0)) + (< RPARAN >)? < COMMA >(< S >)* + (remove = listModifyDirectiveArgs(1)) + ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)? + < RPARAN > + + { /* + *if it is not in the form like "$contains : contains($items, .v-button);" + *for example in @if, like "@if (contains(a b c, b))", then create a temp + *variable for contains(a b c, b); + */ + if(variable == null){ + variable = "$var_"+UUID.randomUUID(); + } + documentHandler.containsDirective(variable,list,remove,separator); + return variable; + } +} + +JAVACODE +String listModifyDirectiveArgs(int nest) +{ + String list = ""; + int nesting = nest; + Token t = null; + + while(true) + { + t = getToken(1); + String s = t.image; + if(t.kind == VARIABLE||t.kind == IDENT) { + list += s; + }else if(s.toLowerCase().equals("auto")||s.toLowerCase().equals("space")||s.toLowerCase().equals("comma")) { + int i = 2; + Token temp = getToken(i); + boolean isLast = true; + while(temp.kind != SEMICOLON) + { if(temp.kind != RPARAN || temp.kind != S) + { isLast = false; } + i++; + temp = getToken(i); + } + + if(isLast) { return list; + } + } else if(t.kind == STRING) { list += s.substring(1,s.length()).substring(0,s.length()-2); + + }else if(t.kind == LPARAN) { nesting++; + if(nesting > nest+1) { throw new CSSParseException("Only one ( ) pair per parameter allowed", getLocator()); + } + }else if(t.kind == RPARAN) { nesting--; + if(nesting == 0) { + return list; + } + } else if(t.kind == COMMA) { + if(nesting == nest) { + return list; }else { + list += ","; } + + }else if(t.kind == S) { + list += " "; } else if(t.kind == LBRACE) { + throw new CSSParseException("Invalid token,'{' found", getLocator()); } + getNextToken(); + } +} + +Node returnDirective() : +{ + String raw; +} +{ + raw = skipStatement() + {return null;} +} + +void debuggingDirective() : +{} +{ + debugDirective() | warnDirective() +} + +void debugDirective() : +{} +{ + + { + String content = skipStatementUntilSemiColon(); + // TODO should evaluate the content expression, call documentHandler.debugDirective() etc. + System.out.println(content); + } + ()* +} + +void warnDirective() : +{} +{ + + { + String content = skipStatementUntilSemiColon(); + // TODO should evaluate the content expression, call documentHandler.warnDirective() etc. + System.err.println(content); + } + ()* +} + +Node forDirective() : +{ + String var; + String from; + String to; + boolean exclusive; + String body; + Token tok; +} +{ + var = variableName() + { + int[] toThrough = {TO, THROUGH}; + from = skipStatementUntil(toThrough); + } + (tok = {exclusive = true;} + | tok = {exclusive = false;}) + to = skipStatementUntilLeftBrace() + ()* + body = skipStatement() + {return documentHandler.forDirective(var, from, to, exclusive, body);} +} + +Node whileDirective() : +{ + String condition; + String body; +} +{ + condition = skipStatementUntilLeftBrace() + body = skipStatement() + { return documentHandler.whileDirective(condition, body);} +} + +void extendDirective() : +{ArrayList list;} +{ + + ()* + list = selectorList() + (";"()*)+ + {documentHandler.extendDirective(list);} +} + +void contentDirective() : +{} +{ + + ()* + (";"()*)+ + {documentHandler.contentDirective();} +} + +JAVACODE +Node importDirective(){ + return null; +} + +JAVACODE +Node charsetDirective(){ + return null; +} + +JAVACODE +Node mozDocumentDirective(){ + return null; +} + +JAVACODE +Node supportsDirective(){ + return null; +} + + +void nestedProperties(): +{String name; +LexicalUnit exp;} +{ + name=property() + ":" ( )* + ()* + { + documentHandler.startNestedProperties(name); + } + ( declaration() )? ( ";" ( )* ( declaration() )? )* + + { + documentHandler.endNestedProperties(name); + } + ()* +} +/** + * @exception ParseException exception during the parse + */ +void styleRuleOrDeclarationOrNestedProperties() : +{ +} +{ + try { + // differentiate between the colon of a pseudo and the colon of nested properties and the colon of a simple property + // first check if it is a normal styleRule, if not check if it is declarationOrNestedProperties(), if still fails, most likely, it is + // is styleRule with pseudo selector with contains functions. have to do it in this way, because both the styleRule and declarationOrNestedProperties() + // have 'skipStatementUntilXXX', which cannot be LOOKAHEAD properly. + ( debuggingDirective() | LOOKAHEAD(selectorList()) styleRule() | LOOKAHEAD(3)declarationOrNestedProperties() | styleRule()) + } catch (JumpException e) { + skipAfterExpression(); + // reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (ParseException e) { + if (errorHandler != null) { + if (e.currentToken != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn-1); + reportError(li, e); + } else { + reportError(getLocator(), e); + } + skipAfterExpression(); + /* + LocatorImpl loc = (LocatorImpl) getLocator(); + loc.column--; + reportWarningSkipText(loc, skipAfterExpression()); + */ + } else { + skipAfterExpression(); + } + } +} +/** + * @exception ParseException exception during the parse + */ +void declarationOrNestedProperties() : +{ boolean important = false; + String name; + LexicalUnitImpl exp; + Token save; + String comment = null; +} +{ + try { + name=property() + { save = token; } + ":" ( )* + (exp=expr() ( important=prio() )? + { + Token next = getToken(1); + if(next.kind == SEMICOLON || next.kind == RBRACE){ + while(next.kind == SEMICOLON){ + skipStatement(); + next = getToken(1); + } + //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); + } + } + } + | ()* + { + documentHandler.startNestedProperties(name); + } + ( declaration() )? ( ";" ( )* ( declaration() )? )* + ()* + { + documentHandler.endNestedProperties(name); + } + ) + + } catch (JumpException e) { + skipAfterExpression(); + // reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (NumberFormatException e) { + if (errorHandler != null) { + errorHandler.error(new CSSParseException("Invalid number " + + e.getMessage(), + getLocator(), + e)); + } + reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (ParseException e) { + if (errorHandler != null) { + if (e.currentToken != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn-1); + reportError(li, e); + } else { + reportError(getLocator(), e); + } + skipAfterExpression(); + /* + LocatorImpl loc = (LocatorImpl) getLocator(); + loc.column--; + reportWarningSkipText(loc, skipAfterExpression()); + */ + } else { + skipAfterExpression(); + } + } +} + +/** + * @exception ParseException exception during the parse + */ +void declaration() : +{ boolean important = false; + String name; + LexicalUnit exp; + Token save; +} +{ + try { + name=property() + { save = token; } + ":" ( )* exp=expr() ( important=prio() )? + { + documentHandler.property(name, exp, important); + } + } catch (JumpException e) { + skipAfterExpression(); + // reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (NumberFormatException e) { + if (errorHandler != null) { + errorHandler.error(new CSSParseException("Invalid number " + + e.getMessage(), + getLocator(), + e)); + } + reportWarningSkipText(getLocator(), skipAfterExpression()); + } catch (ParseException e) { + if (errorHandler != null) { + if (e.currentToken != null) { + LocatorImpl li = new LocatorImpl(this, + e.currentToken.next.beginLine, + e.currentToken.next.beginColumn-1); + reportError(li, e); + } else { + reportError(getLocator(), e); + } + skipAfterExpression(); + /* + LocatorImpl loc = (LocatorImpl) getLocator(); + loc.column--; + reportWarningSkipText(loc, skipAfterExpression()); + */ + } else { + skipAfterExpression(); + } + } +} + +/** + * @exception ParseException exception during the parse + */ +boolean prio() : +{} +{ + ( )* { return true; } +} + +boolean guarded() : +{} +{ + ()* {return true;} +} + +/** + * @exception ParseException exception during the parse + */ +LexicalUnitImpl operator(LexicalUnitImpl prev) : +{Token n;} +{ +/* (comments copied from basic_arithmetics.scss) +*supports: +* 1. standard arithmetic operations (+, -, *, /, %) +* 2. / is treated as css operator, unless one of its operands is variable or there is another binary arithmetic operator +*limits: +* 1. cannot mix arithmetic and css operations, e.g. "margin: 1px + 3px 2px" will fail +* 2. space between add and minus operator and their following operand is mandatory. e.g. "1 + 2" is valid, "1+2" is not +* 3. parenthesis is not supported now. +*/ +n="," ( )* { return LexicalUnitImpl.createComma(n.beginLine, + n.beginColumn, + prev); } +|n="/" ( )* { return LexicalUnitImpl.createSlash(n.beginLine, + n.beginColumn, + prev); } +| n="*" ( )* { return LexicalUnitImpl.createMultiply(n.beginLine, + n.beginColumn, + prev); } +| n="%" ( )* { return LexicalUnitImpl.createModulo(n.beginLine, + n.beginColumn, + prev); } +/* +* for '+', since it can be either a binary operator or an unary operator, +* which is ambiguous. To avoid this, the binary operator '+' always has +* a space before the following term. so '2+3' is not a valid binary expression, +* but '2 + 3' is. The same for '-' operator. +*/ + +| n="+" ( )+{ return LexicalUnitImpl.createAdd(n.beginLine, + n.beginColumn, + prev); } +| n="-" ( )+{ return LexicalUnitImpl.createMinus(n.beginLine, + n.beginColumn, + prev); } +} + +/** + * @exception ParseException exception during the parse + */ +LexicalUnitImpl expr() : +{ + LexicalUnitImpl first, res; + char op; +} +{ + first=term(null){ res = first; } + ( LOOKAHEAD(2) ( LOOKAHEAD(2) res=operator(res) )? res=term(res))* + { return first; } +} + +/** + * @exception ParseException exception during the parse + */ +char unaryOperator() : +{} +{ + "-" { return '-'; } +| "+" { return '+'; } +} + +/** + * @exception ParseException exception during the parse + */ +LexicalUnitImpl term(LexicalUnitImpl prev) : +{ LexicalUnitImpl result = null; + Token n = null; + char op = ' '; +} +{ + (result = nonVariableTerm(prev)| result = variableTerm(prev)) + { + return result; + } +} + +LexicalUnitImpl variableTerm(LexicalUnitImpl prev) : { + LexicalUnitImpl result = null; + String varName = ""; } { + varName = variableName() + {result = LexicalUnitImpl.createVariable(token.beginLine, token.beginColumn, + prev, varName); return result;} } + +LexicalUnitImpl nonVariableTerm(LexicalUnitImpl prev) : { LexicalUnitImpl result = null; + Token n = null; + char op = ' '; + String varName; + String s = ""; +} +{ +( ( ( + op=unaryOperator() )? + (n= + { result = LexicalUnitImpl.createNumber(n.beginLine, n.beginColumn, + prev, number(op, n, 0)); } + | n= + { result = LexicalUnitImpl.createPercentage(n.beginLine, n.beginColumn, + prev, number(op, n, 1)); } + | n= + { result = LexicalUnitImpl.createPT(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createCM(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createMM(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createPC(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createIN(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createPX(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createEMS(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createLEM(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); } + | n= + { result = LexicalUnitImpl.createREM(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); } + | n= + { result = LexicalUnitImpl.createEXS(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createDEG(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); } + | n= + { result = LexicalUnitImpl.createRAD(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); } + | n= + { result = LexicalUnitImpl.createGRAD(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); } + | n= + { result = LexicalUnitImpl.createS(n.beginLine, n.beginColumn, + prev, number(op, n, 1)); } + | n= + { result = LexicalUnitImpl.createMS(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createHZ(n.beginLine, n.beginColumn, + prev, number(op, n, 2)); } + | n= + { result = LexicalUnitImpl.createKHZ(n.beginLine, n.beginColumn, + prev, number(op, n, 3)); } + | n= + { + s = n.image; + int i = 0; + while (i < s.length() + && (Character.isDigit(s.charAt(i)) || (s.charAt(i) == '.'))) { + i++; + } + + result = LexicalUnitImpl.createDimen(n.beginLine, n.beginColumn, prev, + number(op,n,s.length()-i), + s.substring(i)); + } + | result=function(op, prev) ) ) + | ( n= + { result = + LexicalUnitImpl.createString(n.beginLine, n.beginColumn, prev, + convertStringIndex(n.image, 1, + n.image.length() -1));} + | (< DOT >{ s+="."; })?(n= | n= | n= | n=) + { s += convertIdent(n.image); + if ("inherit".equals(s)) { + result = LexicalUnitImpl.createInherit(n.beginLine, n.beginColumn, + prev); + } else { + result = LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, + prev, convertIdent(n.image)); + } + + /* / + Auto correction code used in the CSS Validator but must not + be used by a conformant CSS2 parser. + * Common error : + * H1 { + * color : black + * background : white + * } + * + Token t = getToken(1); + Token semicolon = new Token(); + semicolon.kind = SEMICOLON; + semicolon.image = ";"; + if (t.kind == COLON) { + // @@SEEME. (generate a warning?) + // @@SEEME if expression is a single ident, + generate an error ? + rejectToken(semicolon); + + result = prev; + } + / */ + } + | result=hexcolor(prev) + | result=url(prev) + | result=unicode(prev) + ) ) ( )* + { + return result; } } + +/** + * Handle all CSS2 functions. + * @exception ParseException exception during the parse + */ +LexicalUnitImpl function(char operator, LexicalUnitImpl prev) : +{Token n; + LexicalUnit params = null; +} +{ + n= ( )* + { + String fname = convertIdent(n.image); + if("alpha(".equals(fname)){ + String body = skipStatementUntilSemiColon(); + return LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, + null, "alpha("+body); + }else if("expression(".equals(fname)){ + String body = skipStatementUntilSemiColon(); + return LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, + null, "expression("+body); + } + } + ( params=expr() )? ")" + { + if (operator != ' ') { + throw new CSSParseException("invalid operator before a function.", + getLocator()); + } + String f = convertIdent(n.image); + LexicalUnitImpl l = (LexicalUnitImpl) params; + boolean loop = true; + if ("rgb(".equals(f)) { + // this is a RGB declaration (e.g. rgb(255, 50%, 0) ) + int i = 0; + while (loop && l != null && i < 5) { + switch (i) { + case 0: + case 2: + case 4: + if ((l.getLexicalUnitType() != LexicalUnit.SAC_INTEGER) + && (l.getLexicalUnitType() != LexicalUnit.SAC_PERCENTAGE)) { + loop = false; + } + break; + case 1: + case 3: + if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { + loop = false; + } + break; + default: + throw new ParseException("implementation error"); + } + if (loop) { + l = (LexicalUnitImpl) l.getNextLexicalUnit(); + i ++; + } + } + if ((i == 5) && loop && (l == null)) { + return LexicalUnitImpl.createRGBColor(n.beginLine, + n.beginColumn, + prev, params); + } else { + if (errorHandler != null) { + String errorText; + Locator loc; + if (i < 5) { + if (params == null) { + loc = new LocatorImpl(this, n.beginLine, + n.beginColumn-1); + errorText = "not enough parameters."; + } else if (l == null) { + loc = new LocatorImpl(this, n.beginLine, + n.beginColumn-1); + errorText = "not enough parameters: " + + params.toString(); + } else { + loc = new LocatorImpl(this, l.getLineNumber(), + l.getColumnNumber()); + errorText = "invalid parameter: " + + l.toString(); + } + } else { + loc = new LocatorImpl(this, l.getLineNumber(), + l.getColumnNumber()); + errorText = "too many parameters: " + + l.toString(); + } + errorHandler.error(new CSSParseException(errorText, loc)); + } + + throw new JumpException(); + } + } else if ("counter".equals(f)) { + int i = 0; + while (loop && l != null && i < 3) { + switch (i) { + case 0: + case 2: + if (l.getLexicalUnitType() != LexicalUnit.SAC_IDENT) { + loop = false; + } + break; + case 1: + if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { + loop = false; + } + break; + default: + throw new ParseException("implementation error"); + } + l = (LexicalUnitImpl) l.getNextLexicalUnit(); + i ++; + } + if (((i == 1) || (i == 3)) && loop && (l == null)) { + return LexicalUnitImpl.createCounter(n.beginLine, n.beginColumn, + prev, params); + } + + } else if ("counters(".equals(f)) { + + int i = 0; + while (loop && l != null && i < 5) { + switch (i) { + case 0: + case 4: + if (l.getLexicalUnitType() != LexicalUnit.SAC_IDENT) { + loop = false; + } + break; + case 2: + if (l.getLexicalUnitType() != LexicalUnit.SAC_STRING_VALUE) { + loop = false; + } + break; + case 1: + case 3: + if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { + loop = false; + } + break; + default: + throw new ParseException("implementation error"); + } + l = (LexicalUnitImpl) l.getNextLexicalUnit(); + i ++; + } + if (((i == 3) || (i == 5)) && loop && (l == null)) { + return LexicalUnitImpl.createCounters(n.beginLine, n.beginColumn, + prev, params); + } + } else if ("attr(".equals(f)) { + if ((l != null) + && (l.getNextLexicalUnit() == null) + && (l.getLexicalUnitType() == LexicalUnit.SAC_IDENT)) { + return LexicalUnitImpl.createAttr(l.getLineNumber(), + l.getColumnNumber(), + prev, l.getStringValue()); + } + } else if ("rect(".equals(f)) { + int i = 0; + while (loop && l != null && i < 7) { + switch (i) { + case 0: + case 2: + case 4: + case 6: + switch (l.getLexicalUnitType()) { + case LexicalUnit.SAC_INTEGER: + if (l.getIntegerValue() != 0) { + loop = false; + } + break; + case LexicalUnit.SAC_IDENT: + if (!l.getStringValue().equals("auto")) { + loop = false; + } + break; + case LexicalUnit.SAC_EM: + case LexicalUnit.SAC_EX: + case LexicalUnit.SAC_PIXEL: + case LexicalUnit.SAC_CENTIMETER: + case LexicalUnit.SAC_MILLIMETER: + case LexicalUnit.SAC_INCH: + case LexicalUnit.SAC_POINT: + case LexicalUnit.SAC_PICA: + // nothing + break; + default: + loop = false; + } + break; + case 1: + case 3: + case 5: + if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { + loop = false; + } + break; + default: + throw new ParseException("implementation error"); + } + l = (LexicalUnitImpl) l.getNextLexicalUnit(); + i ++; + } + if ((i == 7) && loop && (l == null)) { + return LexicalUnitImpl.createRect(n.beginLine, n.beginColumn, + prev, params); + } + } + return LexicalUnitImpl.createFunction(n.beginLine, n.beginColumn, prev, + f.substring(0, + f.length() -1), + params); + } +} + +LexicalUnitImpl unicode(LexicalUnitImpl prev) : +{ Token n; +} +{ + n= + { + LexicalUnitImpl params = null; + String s = n.image.substring(2); + int index = s.indexOf('-'); + if (index == -1) { + params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, + params, Integer.parseInt(s, 16)); + } else { + String s1 = s.substring(0, index); + String s2 = s.substring(index); + + params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, + params, Integer.parseInt(s1, 16)); + params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, + params, Integer.parseInt(s2, 16)); + } + + return LexicalUnitImpl.createUnicodeRange(n.beginLine, n.beginColumn, + prev, params); + } +} + +LexicalUnitImpl url(LexicalUnitImpl prev) : +{ Token n; +} +{ + n= + { + String urlname = n.image.substring(4, n.image.length()-1).trim(); + return LexicalUnitImpl.createURL(n.beginLine, n.beginColumn, prev, urlname); + } +} + +/** + * @exception ParseException exception during the parse + */ +LexicalUnitImpl hexcolor(LexicalUnitImpl prev) : +{Token n; +} +{ + n= + { + int r; + LexicalUnitImpl first, params = null; + String s = n.image.substring(1); + + if(s.length()!=3 && s.length()!=6) { + first = null; + throw new CSSParseException("invalid hexadecimal notation for RGB: " + s, + getLocator()); + } + return LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, + prev, n.image); + } +} + +JAVACODE +float number(char operator, Token n, int lengthUnit) { + String image = n.image; + float f = 0; + + if (lengthUnit != 0) { + image = image.substring(0, image.length() - lengthUnit); + } + f = Float.valueOf(image).floatValue(); + return (operator == '-')? -f: f; +} + +JAVACODE +String skipStatementUntilSemiColon(){ + int[] semicolon = {SEMICOLON}; + return skipStatementUntil(semicolon); +} + +JAVACODE +String skipStatementUntilLeftBrace(){ + int[] lBrace = {LBRACE}; + return skipStatementUntil(lBrace); +} + +JAVACODE +String skipStatementUntilMatchingRightParan(){ + int[] leftTokens = {LPARAN, FUNCTION}; // a FUNCTION also contains "(" + int[] rightTokens = {RPARAN}; + StringBuffer s = new StringBuffer(); + int difference = 1; + Token tok; + while(difference != 0){ + tok = getToken(1); + if(tok.kind == EOF) { + return null; + } + for(int sym : leftTokens){ + if(tok.kind == sym){ + difference++; + } + } + for(int sym : rightTokens){ + if(tok.kind == sym){ + difference--; + } + } + if(difference != 0){ + if (tok.image != null) { + s.append(tok.image); + } + getNextToken(); + } + } + return s.toString().trim(); +} + +JAVACODE +String skipStatementUntil(int[] symbols){ + StringBuffer s = new StringBuffer(); + boolean stop = false; + Token tok; + while(!stop){ + tok = getToken(1); + if(tok.kind == EOF) { + return null; + } + for(int sym : symbols){ + if(tok.kind == sym){ + stop = true; + break; + } + } + if(!stop){ + if (tok.image != null) { + s.append(tok.image); + } + getNextToken(); + } + } + return s.toString().trim(); +} + + +JAVACODE +String skipStatement() { + StringBuffer s = new StringBuffer(); + Token tok = getToken(0); + if (tok.image != null) { + s.append(tok.image); + } + while (true) { + tok = getToken(1); + if (tok.kind == EOF) { + return null; + } + s.append(tok.image); + if (tok.kind == LBRACE) { + getNextToken(); + s.append(skip_to_matching_brace()); + getNextToken(); + tok = getToken(1); + break; + } else if (tok.kind == RBRACE) { + getNextToken(); + tok = getToken(1); + break; + } else if (tok.kind == SEMICOLON) { + getNextToken(); + tok = getToken(1); + break; + } + getNextToken(); + } + + // skip white space + while (true) { + if (tok.kind != S) { + break; + } + tok = getNextToken(); + tok = getToken(1); + } + + return s.toString().trim(); +} + +JAVACODE +String skip_to_matching_brace() { + StringBuffer s = new StringBuffer(); + Token tok; + int nesting = 1; + while (true) { + tok = getToken(1); + if (tok.kind == EOF) { + break; + } + s.append(tok.image); + if (tok.kind == LBRACE) { + nesting++; + } else if (tok.kind == RBRACE) { + nesting--; + if (nesting == 0) { + break; + } + } + getNextToken(); + } + return s.toString(); +} + +/* + * Here I handle all CSS2 unicode character stuffs. + * I convert all \XXXXXX character into a single character. + * Don't forget that the parser has recognize the token before. + * (So IDENT won't contain newline and stuffs like this). + */ +JAVACODE +String convertStringIndex(String s, int start, int len) { + StringBuffer buf = new StringBuffer(len); + int index = start; + + while (index < len) { + char c = s.charAt(index); + if (c == '\\') { + if (++index < len) { + c = s.charAt(index); + switch (c) { + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': + case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': + buf.append('\\'); + while (index < len) { + buf.append(s.charAt(index++)); + } + break; + case '\n': + case '\f': + break; + case '\r': + if (index + 1 < len) { + if (s.charAt(index + 1) == '\n') { + index ++; + } + } + break; + default: + buf.append(c); + } + } else { + throw new CSSParseException("invalid string " + s, getLocator()); + } + } else { + buf.append(c); + } + index++; + } + + return buf.toString(); +} + +JAVACODE +String convertIdent(String s) { + return convertStringIndex(s, 0, s.length()); +} + +JAVACODE +String convertString(String s) { + return convertStringIndex(s, 0, s.length()); +} + +JAVACODE +void comments(){ + /*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) { + documentHandler.comment(tmp_t.image); + tmp_t = tmp_t.next; + } + } +} + +/* + * @@HACK + * I can't insert a token into the tokens flow. + * It's jj_consume_token implementation dependant! :-( + */ +JAVACODE +void rejectToken(Token t) { + Token fakeToken = new Token(); + t.next = token; + fakeToken.next = t; + token = fakeToken; +} + +/** + * skip after an expression + */ +JAVACODE +String skipAfterExpression() { + Token t = getToken(1); + StringBuffer s = new StringBuffer(); + s.append(getToken(0).image); + + while ((t.kind != RBRACE) && (t.kind != SEMICOLON) && (t.kind != EOF)) { + s.append(t.image); + getNextToken(); + t = getToken(1); + } + + return s.toString(); +} + +/** + * The following functions are useful for a DOM CSS implementation only and are + * not part of the general CSS2 parser. + */ +// TODO required by original parser but not used by Vaadin? +void _parseRule() : +{String ret = null; +} +{ + ( )* + ( importDeclaration() | debuggingDirective() | styleRule() | media() | page() | fontFace() | ret=skipStatement() + { + if ((ret == null) || (ret.length() == 0)) { + return; + } + if (ret.charAt(0) == '@') { + documentHandler.unrecognizedRule(ret); + } else { + throw new CSSParseException("unrecognize rule: " + ret, + getLocator()); + } + } + ) +} + +void _parseImportRule() : +{ +} +{ + ( )* importDeclaration() +} + +void _parseMediaRule() : +{ +} +{ + ( )* media() +} + +void _parseDeclarationBlock() : +{ +} +{ + ( )* + ( declaration() )? ( ";" ( )* ( declaration() )? )* + } + +ArrayList _parseSelectors() : +{ ArrayList p = null; +} +{ + try { + ( )* p = selectorList() + { return p; } + } catch (ThrowedParseException e) { + throw (ParseException) e.e.fillInStackTrace(); + } +} + +/* + * Local Variables: + * compile-command: javacc Parser.jj & javac Parser.java + * End: + */ diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/ParserConstants.java b/theme-compiler/src/com/vaadin/sass/internal/parser/ParserConstants.java new file mode 100644 index 0000000000..a3ab622ee9 --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/ParserConstants.java @@ -0,0 +1,392 @@ +/* + * 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() + */ +public interface ParserConstants { + + /** 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_FORMAL_COMMENT = 1; + /** Lexical state. */ + int IN_MULTI_LINE_COMMENT = 2; + + /** Literal token values. */ + String[] tokenImage = { + "", + "", + "", + "", + "\"/*\"", + "\"*/\"", + "\"*/\"", + "", + "\"\"", + "\"{\"", + "\"}\"", + "\"|=\"", + "\"^=\"", + "\"$=\"", + "\"*=\"", + "\"~=\"", + "\"=\"", + "\"+\"", + "\"-\"", + "\",\"", + "\";\"", + "\">\"", + "\"~\"", + "\"<\"", + "\"/\"", + "\"[\"", + "\"]\"", + "\"*\"", + "\"%\"", + "\"&\"", + "\".\"", + "\"(\"", + "\")\"", + "\"==\"", + "\"||\"", + "\"&&\"", + "\"!=\"", + "\":\"", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\"to\"", + "\"through\"", + "\"in\"", + "\"from\"", + "\"@mixin\"", + "\"@include\"", + "\"@function\"", + "\"@return\"", + "\"@debug\"", + "\"@warn\"", + "\"@for\"", + "\"@each\"", + "\"@while\"", + "\"@if\"", + "\"@else\"", + "\"@extend\"", + "\"@-moz-document\"", + "\"@supports\"", + "\"@content\"", + "", + "\"if\"", + "", + "", + "", + "", + "<_URL>", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\"@import\"", + "\"@media\"", + "\"@charset\"", + "\"@page\"", + "\"@font-face\"", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + }; + +} diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/ParserImpl.jj b/theme-compiler/src/com/vaadin/sass/internal/parser/ParserImpl.jj deleted file mode 100644 index 0a69342d9a..0000000000 --- a/theme-compiler/src/com/vaadin/sass/internal/parser/ParserImpl.jj +++ /dev/null @@ -1,3028 +0,0 @@ -/* - * 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. - */ -/* -*-java-extended-*- - * Copyright (c) 1999 World Wide Web Consortium - * (Massachusetts Institute of Technology, Institut National de Recherche - * en Informatique et en Automatique, Keio University). - * All Rights Reserved. http://www.w3.org/Consortium/Legal/ - * - * $Id: Parser.jj,v 1.15 2000/10/27 21:09:37 plehegar Exp $ - */ - -options { - IGNORE_CASE = true; - STATIC = false; - USER_CHAR_STREAM = true; - /* DEBUG_TOKEN_MANAGER = true; - DEBUG_PARSER = true; */ -} - -PARSER_BEGIN(ParserImpl) - -package com.vaadin.sass.internal.parser; - -import java.io.*; -import java.net.*; -import java.util.ArrayList; -import java.util.Locale; -import java.util.Map; -import java.util.UUID; - -import org.w3c.css.sac.ConditionFactory; -import org.w3c.css.sac.Condition; -import org.w3c.css.sac.SelectorFactory; -import org.w3c.css.sac.SelectorList; -import org.w3c.css.sac.Selector; -import org.w3c.css.sac.SimpleSelector; -import org.w3c.css.sac.DocumentHandler; -import org.w3c.css.sac.InputSource; -import org.w3c.css.sac.ErrorHandler; -import org.w3c.css.sac.CSSException; -import org.w3c.css.sac.CSSParseException; -import org.w3c.css.sac.Locator; -import org.w3c.css.sac.LexicalUnit; - -import org.w3c.flute.parser.selectors.SelectorFactoryImpl; -import org.w3c.flute.parser.selectors.ConditionFactoryImpl; - -import org.w3c.flute.util.Encoding; - -import com.vaadin.sass.internal.handler.*; - -import com.vaadin.sass.internal.tree.*; - -/** - * A CSS2 parser - * - * @author Philippe Le H�garet - * @version $Revision: 1.15 $ - */ -public class ParserImpl implements org.w3c.css.sac.Parser, Parser { - - // replaces all \t, \n, etc with this StringBuffer. - static final StringBuilder SPACE = new StringBuilder(" "); - - // the document handler for the parser - protected SCSSDocumentHandlerImpl documentHandler; - // the error handler for the parser - protected ErrorHandler errorHandler; - // the input source for the parser - protected InputSource source; - - protected ConditionFactory conditionFactory; - protected SelectorFactory selectorFactory; - - // temporary place holder for pseudo-element ... - private String pseudoElt; - - /** - * Creates a new Parser - */ - public ParserImpl() { - this((CharStream) null); - } - - /** - * @@TODO - * @exception CSSException Not yet implemented - */ - public void setLocale(Locale locale) throws CSSException { - throw new CSSException(CSSException.SAC_NOT_SUPPORTED_ERR); - } - - public InputSource getInputSource(){ - return source; - } - - /** - * Set the document handler for this parser - */ - public void setDocumentHandler(DocumentHandler handler) { - this.documentHandler = (SCSSDocumentHandlerImpl) handler; - } - - public void setSelectorFactory(SelectorFactory selectorFactory) { - this.selectorFactory = selectorFactory; - } - - public void setConditionFactory(ConditionFactory conditionFactory) { - this.conditionFactory = conditionFactory; - } - - /** - * Set the error handler for this parser - */ - public void setErrorHandler(ErrorHandler error) { - this.errorHandler = error; - } - - /** - * Main parse methods - * - * @param source the source of the style sheet. - * @exception IOException the source can't be parsed. - * @exception CSSException the source is not CSS valid. - */ - public void parseStyleSheet(InputSource source) - throws CSSException, IOException { - this.source = source; - ReInit(getCharStreamWithLurk(source)); - if (selectorFactory == null) { - selectorFactory = new SelectorFactoryImpl(); - } - if (conditionFactory == null) { - conditionFactory = new ConditionFactoryImpl(); - } - - parserUnit(); - } - - /** - * Convenient method for URIs. - * - * @param systemId the fully resolved URI of the style sheet. - * @exception IOException the source can't be parsed. - * @exception CSSException the source is not CSS valid. - */ - public void parseStyleSheet(String systemId) - throws CSSException, IOException { - parseStyleSheet(new InputSource(systemId)); - } - - /** - * This method parses only one rule (style rule or at-rule, except @charset). - * - * @param source the source of the rule. - * @exception IOException the source can't be parsed. - * @exception CSSException the source is not CSS valid. - */ - // TODO required by original parser but not used by Vaadin? - public void parseRule(InputSource source) - throws CSSException, IOException { - this.source = source; - ReInit(getCharStreamWithLurk(source)); - - if (selectorFactory == null) { - selectorFactory = new SelectorFactoryImpl(); - } - if (conditionFactory == null) { - conditionFactory = new ConditionFactoryImpl(); - } - _parseRule(); - } - - /** - * This method parses a style declaration (including the surrounding curly - * braces). - * - * @param source the source of the style declaration. - * @exception IOException the source can't be parsed. - * @exception CSSException the source is not CSS valid. - */ - public void parseStyleDeclaration(InputSource source) - throws CSSException, IOException { - this.source = source; - ReInit(getCharStreamWithLurk(source)); - - if (selectorFactory == null) { - selectorFactory = new SelectorFactoryImpl(); - } - if (conditionFactory == null) { - conditionFactory = new ConditionFactoryImpl(); - } - _parseDeclarationBlock(); - } - - /** - * This methods returns "http://www.w3.org/TR/REC-CSS2". - * @return the string "http://www.w3.org/TR/REC-CSS2". - */ - public String getParserVersion() { - return "http://www.w3.org/TR/REC-CSS2"; - } - - /** - * Parse methods used by DOM Level 2 implementation. - */ - public void parseImportRule(InputSource source) - throws CSSException, IOException { - this.source = source; - ReInit(getCharStreamWithLurk(source)); - - if (selectorFactory == null) { - selectorFactory = new SelectorFactoryImpl(); - } - if (conditionFactory == null) { - conditionFactory = new ConditionFactoryImpl(); - } - _parseImportRule(); - } - - public void parseMediaRule(InputSource source) - throws CSSException, IOException { - this.source = source; - ReInit(getCharStreamWithLurk(source)); - - if (selectorFactory == null) { - selectorFactory = new SelectorFactoryImpl(); - } - if (conditionFactory == null) { - conditionFactory = new ConditionFactoryImpl(); - } - _parseMediaRule(); - } - - public SelectorList parseSelectors(InputSource source) - throws CSSException, IOException { - this.source = source; - ReInit(getCharStreamWithLurk(source)); - - return null; - } - - public LexicalUnit parsePropertyValue(InputSource source) - throws CSSException, IOException { - this.source = source; - ReInit(getCharStreamWithLurk(source)); - - return expr(); - } - - public boolean parsePriority(InputSource source) - throws CSSException, IOException { - this.source = source; - ReInit(getCharStreamWithLurk(source)); - - return prio(); - } - - /** - * Convert the source into a Reader. Used only by DOM Level 2 parser methods. - */ - private Reader getReader(InputSource source) throws IOException { - if (source.getCharacterStream() != null) { - return source.getCharacterStream(); - } else if (source.getByteStream() != null) { - // My DOM level 2 implementation doesn't use this case. - if (source.getEncoding() == null) { - // unknown encoding, use ASCII as default. - return new InputStreamReader(source.getByteStream(), "ASCII"); - } else { - return new InputStreamReader(source.getByteStream(), - source.getEncoding()); - } - } else { - // systemId - // @@TODO - throw new CSSException("not yet implemented"); - } - } - - /** - * Convert the source into a CharStream with encoding informations. - * The encoding can be found in the InputSource or in the CSS document. - * Since this method marks the reader and make a reset after looking for - * the charset declaration, you'll find the charset declaration into the - * stream. - */ - private CharStream getCharStreamWithLurk(InputSource source) - throws CSSException, IOException { - if (source.getCharacterStream() != null) { - // all encoding are supposed to be resolved by the user - // return the reader - return new Generic_CharStream(source.getCharacterStream(), 1, 1); - } else if (source.getByteStream() == null) { - // @@CONTINUE ME. see also getReader() with systemId - try { - source.setByteStream(new URL(source.getURI()).openStream()); - } catch (Exception e) { - try { - source.setByteStream(new FileInputStream(source.getURI())); - } catch (IOException ex) { - throw new CSSException("invalid url ?"); - } - } - } - //use UTF-8 as the default encoding. - String encoding = source.getEncoding(); - InputStream input = source.getByteStream(); - if (!input.markSupported()) { - // If mark is not supported, wrap it in a stream which supports mark - input = new BufferedInputStream(input); - source.setByteStream(input); - } - // Mark either the original stream or the wrapped stream - input.mark(100); - if(encoding == null){ - encoding = "ASCII"; - - char c = ' '; - - c = (char) input.read(); - - if (c == '@') { - // hum, is it a charset ? - int size = 100; - byte[] buf = new byte[size]; - input.read(buf, 0, 7); - String keyword = new String(buf, 0, 7); - if (keyword.equals("charset")) { - // Yes, this is the charset declaration ! - - // here I don't use the right declaration : white space are ' '. - while ((c = (char) input.read()) == ' ') { - // find the first quote - } - char endChar = c; - int i = 0; - - if ((endChar != '"') && (endChar != '\'')) { - // hum this is not a quote. - throw new CSSException("invalid charset declaration"); - } - - while ((c = (char) input.read()) != endChar) { - buf[i++] = (byte) c; - if (i == size) { - byte[] old = buf; - buf = new byte[size + 100]; - System.arraycopy(old, 0, buf, 0, size); - size += 100; - } - } - while ((c = (char) input.read()) == ' ') { - // find the next relevant character - } - if (c != ';') { - // no semi colon at the end ? - throw new CSSException("invalid charset declaration: " - + "missing semi colon"); - } - encoding = new String(buf, 0, i); - if (source.getEncoding() != null) { - // compare the two encoding informations. - // For example, I don't accept to have ASCII and after UTF-8. - // Is it really good ? That is the question. - if (!encoding.equals(source.getEncoding())) { - throw new CSSException("invalid encoding information."); - } - } - } // else no charset declaration available - } - } - // ok set the real encoding of this source. - source.setEncoding(encoding); - // set the real reader of this source. - source.setCharacterStream(new InputStreamReader(source.getByteStream(), - Encoding.getJavaEncoding(encoding))); - // reset the stream (leave the charset declaration in the stream). - input.reset(); - - return new Generic_CharStream(source.getCharacterStream(), 1, 1); - } - - private LocatorImpl currentLocator; - private Locator getLocator() { - if (currentLocator == null) { - currentLocator = new LocatorImpl(this, token.beginLine, token.beginColumn); - return currentLocator; - } - return currentLocator.reInit(this, token.beginLine, token.beginColumn); - } - private LocatorImpl getLocator(Token save) { - if (currentLocator == null) { - currentLocator = new LocatorImpl(this, save.beginLine, save.beginColumn); - return currentLocator; - } - return currentLocator.reInit(this, save.beginLine, save.beginColumn); - } - - private void reportError(Locator l, Exception e) { - if (errorHandler != null) { - if (e instanceof ParseException) { - // construct a clean error message. - ParseException pe = (ParseException) e; - if (pe.specialConstructor) { - StringBuffer errorM = new StringBuffer(); - if (pe.currentToken != null) { - errorM.append("encountered \"") - .append(pe.currentToken.next); - } - errorM.append('"'); - if (pe.expectedTokenSequences.length != 0) { - errorM.append(". Was expecting one of: "); - for (int i = 0; i < pe.expectedTokenSequences.length; i++) { - for (int j = 0; j < pe.expectedTokenSequences[i].length; j++) { - int kind = pe.expectedTokenSequences[i][j]; - if (kind != S) { - errorM.append(pe.tokenImage[kind]); - errorM.append(' '); - } - } - } - } - errorHandler.error(new CSSParseException(errorM.toString(), - l, e)); - } else { - errorHandler.error(new CSSParseException(e.getMessage(), - l, e)); - } - } else if (e == null) { - errorHandler.error(new CSSParseException("error", l, null)); - } else { - errorHandler.error(new CSSParseException(e.getMessage(), l, e)); - } - } - } - - private void reportWarningSkipText(Locator l, String text) { - if (errorHandler != null && text != null) { - errorHandler.warning(new CSSParseException("Skipping: " + text, l)); - } - } -} - -PARSER_END(ParserImpl) - -/* - * The tokenizer - */ - - -TOKEN : -{ - < S : ( [ " ", "\t" , "\n" , "\r", "\f" ] )+ > - { image = ParserImpl.SPACE; } -} - -/* - * 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 - */ - -SPECIAL_TOKEN : { -< SINGLE_LINE_COMMENT: "//"(~["\n","\r"])* ("\n"|"\r"|"\r\n")? > } - - -MORE : -{ - <"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT -| - "/*" : IN_MULTI_LINE_COMMENT -} - -SPECIAL_TOKEN : -{ - : DEFAULT -} - - -SKIP : -{ - : DEFAULT -} - - -MORE : -{ - < ~[] > -} - - -TOKEN : -{ - < CDO : "" > - | < LBRACE : "{" > - | < RBRACE : "}"> - | < DASHMATCH : "|=" > - | < CARETMATCH : "^=" > - | < DOLLARMATCH : "$=" > - | < STARMATCH : "*=" > - | < INCLUDES : "~=" > - | < EQ : "=" > - | < PLUS : "+" > - | < MINUS : "-" > - | < COMMA : "," > - | < SEMICOLON : ";" > - | < PRECEDES : ">" > - | < SIBLING : "~" > - | < SUCCEEDS : "<" > - | < DIV : "/" > - | < LBRACKET : "[" > - | < RBRACKET : "]" > - | < ANY : "*" > - | < MOD : "%" > - | < PARENT : "&" > - | < DOT : "." > - | < LPARAN : "(" > - | < RPARAN : ")"> - | < COMPARE : "==" > - | < OR : "||" > - | < AND : "&&" > - | < NOT_EQ : "!=" > -} - - -TOKEN : -{ - < COLON : ":" > -} - -< DEFAULT > -TOKEN : -{ - < INTERPOLATION : "#{"< VARIABLE > "}"> -} - - -TOKEN : /* basic tokens */ -{ - < NONASCII : ["\200"-"\377"] > - | < #H : ["0"-"9", "a"-"f"] > - | < #UNICODE : "\\" ( )? /* I can't say {1,6} */ - ( )? ( )? - ( )? ( )? - ( [ " ", "\t" , "\n" , "\r", "\f" ] )? > - | < #ESCAPE : | ( "\\" [ " "-"~","\200"-"\377" ] ) > - | < #NMSTART : ("-")?[ "a"-"z","_"] | | > - | < #NMCHAR : ["a"-"z", "0"-"9", "-", "_"] | | > - | < #STRINGCHAR : [ "\t"," ","!","#","$","%","&","("-"~" ] - | "\\\n" | "\\\r\n" | "\\\r" | "\\\f" - | | > - | < #D : ["0"-"9"] > - | < #NAME : ( )+ > - -} - - -TOKEN : -{ - - | - | - | -} - -/* DERECTIVES */ - -TOKEN : -{ - - | - | - | - | - | - | - | - | - | - | - | - | - | - | -} - -< DEFAULT > -TOKEN: -{ - < MICROSOFT_RULE : "filter"|"-ms-filter" > -} - -< DEFAULT > -TOKEN: -{ - < IF : "if" > -} - - -TOKEN: -{ - < GUARDED_SYM : "!" ( )? "default"> -} - - -TOKEN : -{ - < STRING : ( "\"" ( | "'" )* "\"" ) | - ( "'" ( | "\"" )* "'" ) > - | < IDENT : ( )* > - | < NUMBER : ( )+ | ( )* "." ( )+ > - | < #_URL : [ "!","#","$","%","&","*"-"~" ] | | > - | < URL : "url(" ( )* - ( | ( <_URL> )* ) ( )* ")" > -} - - -TOKEN: -{ - < VARIABLE : "$" > -} - - -TOKEN : -{ - < PERCENTAGE : "%" > - | < PT : "pt" > - | < MM : "mm" > - | < CM : "cm" > - | < PC : "pc" > - | < IN : "in" > - | < PX : "px" > - | < EMS : "em" > - | < LEM : "lem" > - | < REM : "rem" > - | < EXS : "ex" > - | < DEG : "deg" > - | < RAD : "rad" > - | < GRAD : "grad" > - | < MS : "ms" > - | < SECOND : "s" > - | < HZ : "Hz" > - | < KHZ : "kHz" > - | < DIMEN : > -} - - -TOKEN : -{ - < HASH : "#" > -} - -/* RESERVED ATRULE WORDS */ - -TOKEN : -{ - < IMPORT_SYM : "@import"> - | < MEDIA_SYM : "@media" > - | < CHARSET_SYM : "@charset" > - | < PAGE_SYM : "@page" > - | < FONT_FACE_SYM: "@font-face" > - | < KEY_FRAME_SYM: "@keyframes" | "@-moz-keyframes" | "@-o-keyframes" | "@-webkit-keyframes" | "@-ms-keyframes"> - | < ATKEYWORD : "@" > -} - - -TOKEN : -{ - < IMPORTANT_SYM : "!" ( )? "important" > -} - - -TOKEN : -{ - < #RANGE0 : > - | < #RANGE1 : ( "?" )? > - | < #RANGE2 : ( "?" )? ( "?" )? > - | < #RANGE3 : ( "?" )? ( "?" )? ( "?" )? > - | < #RANGE4 : ( "?" )? ( "?" )? ( "?" )? ( "?" )? > - | < #RANGE5 : ( "?" )? ( "?" )? ( "?" )? ( "?" )? ( "?" )? > - | < #RANGE6 : "?" ( "?" )? ( "?" )? ( "?" )? ( "?" )? ( "?" )? > - | < #RANGE : | | - | | | | > - | < #UNI : ( )? ( )? ( )? ( )? ( )? > - | < UNICODERANGE : "U+" - | "U+" "-" > -} - -< DEFAULT > -TOKEN : -{ - < REMOVE : "remove" (< S >)? "(" > - | < APPEND : "append" (< S >)? "(" > - | < CONTAINS : "contains" (< S >)? "(" > -} - - -TOKEN : -{ - < FUNCTION : (< S >)* "(" > -} - - -TOKEN : -{ /* avoid token manager error */ - < UNKNOWN : ~[] > -} - -/* - * The grammar of CSS2 - */ - -/** - * The main entry for the parser. - * - * @exception ParseException exception during the parse - */ -void parserUnit() : -{} -{ - try { - { documentHandler.startDocument(source); } - ( charset() )? - ( comments() - | ignoreStatement() )* - ( importDeclaration() ( ignoreStatement() ( )* )* )* - afterImportDeclaration() - - } finally { - documentHandler.endDocument(source); - } -} - -void charset() : -{ Token n; } -{ - try { - ( )* n= ( )* ";" - } catch (ParseException e) { - reportError(getLocator(e.currentToken.next), e); - skipStatement(); - // reportWarningSkipText(getLocator(), skipStatement()); - } catch (Exception e) { - reportError(getLocator(), e); - skipStatement(); - // reportWarningSkipText(getLocator(), skipStatement()); - } -} - -void afterImportDeclaration() : -{String ret; - Locator l; -} -{ - ( - ( debuggingDirective() | mixinDirective() | controlDirective() | includeDirective() | styleRule() | media() - | page() | fontFace() | keyframes() | LOOKAHEAD(variable()) variable() | listModifyDirective() - | { l = getLocator(); } ret=skipStatement() - { - if ((ret == null) || (ret.length() == 0)) { - return; - } - if (ret.charAt(0) == '@') { - documentHandler.unrecognizedRule(ret); - } else { - reportWarningSkipText(l, ret); - } - } - ) - ( ignoreStatement() ( )* )* )* -} - -void ignoreStatement() : -{} -{ - | | atRuleDeclaration() -} - -/** - * The import statement - * - * @exception ParseException exception during the parse - */ -void importDeclaration() : -{Token n; - String uri; - MediaListImpl ml = new MediaListImpl(); - boolean isURL = false; -} -{ - try { - - ( )* ( n= { uri = convertStringIndex(n.image, 1, - n.image.length() -1); } - | n= - { - isURL=true; - uri = n.image.substring(4, n.image.length()-1).trim(); - if ((uri.charAt(0) == '"') - || (uri.charAt(0) == '\'')) { - uri = uri.substring(1, uri.length()-1); - } - } - ) - ( )* mediaStatement(ml) ";" - ( )* - { - if (ml.getLength() == 0) { - // see section 6.3 of the CSS2 recommandation. - ml.addItem("all"); - } - documentHandler.importStyle(uri, ml, isURL); - } - } catch (ParseException e) { - reportError(getLocator(), e); - skipStatement(); - // reportWarningSkipText(getLocator(), skipStatement()); - } -} - -/** - * @exception ParseException exception during the parse - */ -void keyframes() : -{ - Token n; - boolean start = false; - String keyframeName = null; - String animationname = ""; -} -{ - try { - n= ( )* {keyframeName = n.image;} - (n = {animationname += n.image; }|n = < INTERPOLATION >{ animationname += n.image; })+()* - {start = true; documentHandler.startKeyFrames(keyframeName, animationname); } - ( )* ( keyframeSelector() | contentDirective() )* ( )* - } catch (ParseException e) { - reportError(getLocator(), e); - skipStatement(); - } finally { - if (start) { - documentHandler.endKeyFrames(); - } - } -} - -void keyframeSelector(): -{ - Token n; - String selector = ""; - boolean start = false; -} -{ - try{ - (n = | n = | n = ){selector += n.image;} ()* - ( ()* (n = | n = | n = ) {selector += (", " + n.image);} ()* )* - ()* - { - start = true; - documentHandler.startKeyframeSelector(selector); - } - (ifContentStatement() | microsoftExtension() )* - ()* - } - catch (ThrowedParseException e) { - if (errorHandler != null) { - LocatorImpl li = new LocatorImpl(this, - e.e.currentToken.next.beginLine, - e.e.currentToken.next.beginColumn-1); - reportError(li, e.e); - } - } catch (ParseException e) { - reportError(getLocator(), e); - skipStatement(); - // reportWarningSkipText(getLocator(), skipStatement()); - } catch (TokenMgrError e) { - reportWarningSkipText(getLocator(), skipStatement()); - } finally { - if (start) { - documentHandler.endKeyframeSelector(); - } - } -} - -/** - * @exception ParseException exception during the parse - */ -/* see http://www.w3.org/TR/css3-mediaqueries/ */ -void media() : -{ - boolean start = false; - String ret; - MediaListImpl ml = new MediaListImpl(); -} -{ - try { - ( )* - mediaStatement(ml) - { start = true; documentHandler.startMedia(ml); } - ( )* ( debuggingDirective() | styleRule() | skipUnknownRule() )* ( )* - } catch (ParseException e) { - reportError(getLocator(), e); - skipStatement(); - // reportWarningSkipText(getLocator(), skipStatement()); - } finally { - if (start) { - documentHandler.endMedia(ml); - } - } -} - -void mediaStatement(MediaListImpl ml) : -{ - Token t; -} -{ - { - t = getToken(1); - // loop over comma separated parts, add each to ml - while ((t.kind != LBRACE) && (t.kind != EOF) && (t.kind != SEMICOLON)) { - StringBuffer s = new StringBuffer(); - s.append(getToken(0).image); - while ((t.kind != COMMA) && (t.kind != LBRACE) && (t.kind != EOF) && (t.kind != SEMICOLON)) { - s.append(t.image); - getNextToken(); - t = getToken(1); - } - if (t.kind == COMMA) { - // skip the comma and the token before it that is still the active token - getNextToken(); - getNextToken(); - t = getToken(1); - } - String str = s.toString().trim(); - if (str.length() > 0) { - ml.addItem(str); - } - } - } -} - -/** - * @exception ParseException exception during the parse - */ -String medium() : /* tv, projection, screen, ... */ -{Token n;} -{ - n= { return convertIdent(n.image); } -} - -/** - * @exception ParseException exception during the parse - */ -void page() : -{ - boolean start = false; - Token n = null; - String page = null; - String pseudo = null; -} -{ - try { - ( )* ( n= ( )* )? - ( pseudo=pseudo_page() )? - { - if (n != null) { - page = convertIdent(n.image); - } - } - ()* - { - start = true; - documentHandler.startPage(page, pseudo); - } - ( declaration() )? ( ";" ( )* ( declaration() )? )* - ()* - } catch (ParseException e) { - if (errorHandler != null) { - LocatorImpl li = new LocatorImpl(this, - e.currentToken.next.beginLine, - e.currentToken.next.beginColumn-1); - reportError(li, e); - skipStatement(); - // reportWarningSkipText(li, skipStatement()); - } else { - skipStatement(); - } - } finally { - if (start) { - documentHandler.endPage(page, pseudo); - } - } -} - -String pseudo_page() : -{ Token n; } -{ - ":" n= ( )* { return convertIdent(n.image); } -} - -void fontFace() : -{ - boolean start = false; -} -{ - try { - ( )* - ()* - { start = true; documentHandler.startFontFace(); } - ( declaration() )? ( ";" ( )* ( declaration() )? )* - ()* - } catch (ParseException e) { - reportError(getLocator(), e); - skipStatement(); - // reportWarningSkipText(getLocator(), skipStatement()); - } finally { - if (start) { - documentHandler.endFontFace(); - } - } -} - -/** - * @exception ParseException exception during the parse - */ -void atRuleDeclaration() : -{Token n; - String ret; -} -{ - n= - { - ret=skipStatement(); - if ((ret != null) && (ret.charAt(0) == '@')) { - documentHandler.unrecognizedRule(ret); - } else { - reportWarningSkipText(getLocator(), ret); - } - } -} - -void skipUnknownRule() : -{ Token n;} -{ - ( n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n= -| n=";" -| n="-" -| n= - ) { - String ret; - Locator loc = getLocator(); - ret=skipStatement(); - if ((ret != null) && (n.image.charAt(0) == '@')) { - documentHandler.unrecognizedRule(ret); - } else { - reportWarningSkipText(loc, ret); - } - } -} - -/** - * @exception ParseException exception during the parse - */ -char combinator() : -{ -char connector = ' '; -} -{ - (connector = combinatorChar() - | (connector = combinatorChar())?) { return connector; } -} - -/**to refactor combinator and reuse in selector().*/ -char combinatorChar() : -{Token t;} -{ - (t = | t = | t = ) ()* - { - return t.image.charAt(0); - } -} - -void microsoftExtension() : -{ - Token n; - String name = ""; - String value = ""; -} - -{ - // This is not really taking the syntax of filter rules into account - n = < MICROSOFT_RULE > (< S >)* { name = n.image; } - < COLON > - ((n = < IDENT > { value += n.image; }) - | (n = < NUMBER > { value += n.image; }) - | (n = < STRING > { value += n.image; }) - | (n = < COMMA > { value += n.image; }) - | (n = < INTERPOLATION > { value += n.image; }) - | (n = < COLON > { value += n.image; }) - | (n = < FUNCTION > { value += n.image; }) - | (n = < RPARAN > { value += n.image; }) - | (n = < EQ > { value += n.image; }) - | (n = < DOT > { value += n.image; }) - | (n = < S > { if(value.lastIndexOf(' ') != value.length()-1) - { value += n.image; } } - ) )+ - < SEMICOLON > - (< S >)* - { documentHandler.microsoftDirective(name, value); } -} - -/** - * @exception ParseException exception during the parse - */ -String property() : -{Token t;String s = ""; -} -{ - (t = {s += t.image; }|t = < INTERPOLATION >{ s += t.image; })+(< S >)* - { - return s; - } -} - -String variableName() : -{Token n;} -{ - n= ()* {return convertIdent(n.image.substring(1));} -} - -String functionName() : -{Token n;} -{ - n= ( )* {return convertIdent(n.image.substring(0, n.image.length()-1));} -} -/** - * @exception ParseException exception during the parse - */ -void styleRule() : -{ - boolean start = false; - ArrayList l = null; - Token save; - Locator loc; -} -{ - try { - l=selectorList() { save = token; } ()* - { - start = true; - documentHandler.startSelector(l); - } - // a CSS import here will not work - ( ifContentStatement() | microsoftExtension() | importDeclaration() )* - ()* - } catch (ThrowedParseException e) { - if (errorHandler != null) { - LocatorImpl li = new LocatorImpl(this, - e.e.currentToken.next.beginLine, - e.e.currentToken.next.beginColumn-1); - reportError(li, e.e); - } - } catch (ParseException e) { - reportError(getLocator(), e); - skipStatement(); - // reportWarningSkipText(getLocator(), skipStatement()); - } catch (TokenMgrError e) { - reportWarningSkipText(getLocator(), skipStatement()); - } finally { - if (start) { - documentHandler.endSelector(); - } - } -} - - ArrayList selectorList() : -{ - ArrayList selectors = new ArrayList(); - String selector; -} -{ - selector=selector() ( ()* { selectors.add(selector); } - selector=selector() )* - { selectors.add(selector); - return selectors; - } -} - -/** - * @exception ParseException exception during the parse - */ -String selector() : -{ - String selector = null; - char comb; -} -{ - try { - // the selector can begin either a simple_selector, or a combinatorChar(+, >, ~). - // when beginning with combinatorChar, the next one should be a simple_selector(). - (selector=simple_selector(null, ' ') | (comb=combinatorChar() selector=simple_selector(selector, comb))) - ( LOOKAHEAD(2) comb=combinator() - selector=simple_selector(selector, comb) )* ()* - { - return selector; - } - } catch (ParseException e) { - /* - Token t = getToken(1); - StringBuffer s = new StringBuffer(); - s.append(getToken(0).image); - while ((t.kind != COMMA) && (t.kind != SEMICOLON) - && (t.kind != LBRACE) && (t.kind != EOF)) { - s.append(t.image); - getNextToken(); - t = getToken(1); - } - reportWarningSkipText(getLocator(), s.toString()); - */ - Token t = getToken(1); - while ((t.kind != COMMA) && (t.kind != SEMICOLON) - && (t.kind != LBRACE) && (t.kind != EOF)) { - getNextToken(); - t = getToken(1); - } - - throw new ThrowedParseException(e); - } -} - -/** - * @exception ParseException exception during the parse - */ -String simple_selector(String selector, char comb) : -{ - String simple_current = null; - String cond = null; - - pseudoElt = null; -} -{ - ( (simple_current=element_name() - ( cond=hash(cond) | cond=_class(cond) - | cond=attrib(cond) | cond=pseudo(cond) )* ) - | ( cond = hash(cond) | cond=_class(cond) - | cond=attrib(cond) | cond=pseudo(cond) )+ - ) - { - if (simple_current == null) { - simple_current = ""; - } - if (cond != null) { - simple_current = simple_current + cond; - } - StringBuilder builder = new StringBuilder(); - switch (comb) { - case ' ': - if(selector!=null){ - builder.append(selector).append(" "); - } - break; - case '+': - case '>': - case '~': - if(selector!=null){ - builder.append(selector).append(" "); - } - builder.append(comb).append(" "); - break; - default: - throw new ParseException("invalid state. send a bug report"); - } - builder.append(simple_current); - selector = builder.toString(); - - if (pseudoElt != null) { - selector = selector + pseudoElt; - } - return selector; - } -} - -/** - * @exception ParseException exception during the parse - */ -String _class(String pred) : -{Token t; -String s = "."; -} -{ - "." (t = {s += t.image; }|t = < INTERPOLATION >{ s += t.image; })+ - { - - if (pred == null) { - return s; - } else { - return pred + s; - } - } -} - -/** - * @exception ParseException exception during the parse - */ -String element_name() : -{Token t; String s = "";} -{ - (t = {s += t.image; }|t = < INTERPOLATION >{ s += t.image; })+ - { - return s; - } - | "*" - { return "*"; } - | "&" - { return "&"; } -} - -/** - * @exception ParseException exception during the parse - */ -String attrib(String pred) : -{ - int cases = 0; - Token att = null; - Token val = null; - String attValue = null; -} -{ - "[" ( )* att= ( )* - ( ( "=" { cases = 1; } - | { cases = 2; } - | { cases = 3; } - | { cases = 4; } - | { cases = 5; } - | { cases = 6; } ) ( )* - ( val= { attValue = val.image; } - | val= { attValue = val.image; } - ) - ( )* )? - "]" - { - String name = convertIdent(att.image); - String c; - switch (cases) { - case 0: - c = name; - break; - case 1: - c = name + "=" + attValue; - break; - case 2: - c = name + "~=" + attValue; - break; - case 3: - c = name + "|=" +attValue; - break; - case 4: - c = name + "^=" +attValue; - break; - case 5: - c = name + "$=" +attValue; - break; - case 6: - c = name + "*=" +attValue; - break; - default: - // never reached. - c = null; - } - c = "[" + c + "]"; - if (pred == null) { - return c; - } else { - return pred + c; - } - } -} - -/** - * @exception ParseException exception during the parse - */ -String pseudo(String pred) : -{Token n; -Token param; -String d; -boolean isPseudoElement = false; -} -{ - ":" (":"{isPseudoElement=true;})?( n= - { - String s = ":" + convertIdent(n.image); - if (isPseudoElement) { - if (pseudoElt != null) { - throw new CSSParseException("duplicate pseudo element definition " - + s, getLocator()); - } else { - pseudoElt = ":"+s; - return pred; - } - } else { - String c = s; - if (pred == null) { - return c; - } else { - return pred + c; - } - } - } - | ( n= ( )* d=skipStatementUntilMatchingRightParan() - { - // accept anything between function and a right parenthesis - String f = convertIdent(n.image); - String colons = isPseudoElement ? "::" : ":"; - String pseudofn = colons + f + d + ")"; - if (pred == null) { - return pseudofn; - } else { - return pred + pseudofn; - } - } - ) - ) -} - -/** - * @exception ParseException exception during the parse - */ -String hash(String pred) : -{Token n; } -{ - n= - { - String d = n.image; - if (pred == null) { - return d; - } else { - return pred + d; - } - } -} - -void variable() : -{ - String name; - LexicalUnitImpl exp = null; - boolean guarded = false; - String raw; -} -{ - try{ - name = variableName() - ":" ( )* exp=expr() ( guarded=guarded() )?(";"()*)+ - //raw=skipStatementUntilSemiColon() - { - documentHandler.variable(name, exp, guarded); - } - }catch (JumpException e) { - skipAfterExpression(); - } catch (NumberFormatException e) { - if (errorHandler != null) { - errorHandler.error(new CSSParseException("Invalid number " - + e.getMessage(), - getLocator(), - e)); - } - reportWarningSkipText(getLocator(), skipAfterExpression()); - } catch (ParseException e) { - if (errorHandler != null) { - if (e.currentToken != null) { - LocatorImpl li = new LocatorImpl(this, - e.currentToken.next.beginLine, - e.currentToken.next.beginColumn-1); - reportError(li, e); - } else { - reportError(getLocator(), e); - } - skipAfterExpression(); - } else { - skipAfterExpression(); - } - } -} - -void controlDirective() : -{} -{ - ifDirective() | eachDirective() -} - -void ifContentStatement() : -{} -{ - contentDirective() | includeDirective() | media() | extendDirective() | styleRuleOrDeclarationOrNestedProperties() - | keyframes() | LOOKAHEAD(variable()) variable() | listModifyDirective() | controlDirective() | atRuleDeclaration() -} - -void ifDirective() : -{ - Token n = null; - String s = null; - String evaluator = ""; -} -{ - < IF_SYM > - ( s = booleanExpressionToken() { evaluator += s;} )+ - < LBRACE >(< S >)* - { documentHandler.startIfElseDirective(); - documentHandler.ifDirective(evaluator); - } - ( ifContentStatement() | fontFace() )* - < RBRACE >(< S >)* - (elseDirective())* - { documentHandler.endIfElseDirective(); } -} - -void elseDirective() : -{ - String evaluator = ""; - Token n = null; - String s = null; -} -{ - < ELSE_SYM >(< S >)* - ( < IF > ( s = booleanExpressionToken() { evaluator += s; } )+ )? - < LBRACE >(< S >)* - { if(!evaluator.trim().equals("")){ documentHandler.ifDirective(evaluator); } - else{ documentHandler.elseDirective(); } - } - ( ifContentStatement() | fontFace() )* - < RBRACE >(< S >)* -} - -String booleanExpressionToken() : -{ - Token n = null; - String s = null; -} -{ - ( - LOOKAHEAD(containsDirective()) - s = containsDirective() - |n = < VARIABLE > - |n = < IDENT > - |n = < NUMBER > - |n = < LPARAN > - |n = < RPARAN > - |n = < PLUS > - |n = < MINUS > - |n = < DIV > - |n = < ANY > - |n = < COMPARE > - |n = < EQ > - |n = < PRECEDES > - |n = < SUCCEEDS > - |n = < OR > - |n = < AND > - |n = < S > - |n = < NOT_EQ > -){ - if(n!=null){return n.image;} - else{return s;} - } -} - -void eachDirective() : -{ - Token var; - ArrayList list = null; - String listVariable = null; -} -{ - < EACH_SYM > - (< S >)* - var = < VARIABLE > (< S >)* < EACH_IN > (< S >)* - (list = stringList() - {documentHandler.startEachDirective(var.image, list);} - |listVariable = variableName() - {documentHandler.startEachDirective(var.image, listVariable);} - ) - < LBRACE >(< S >)* - ( ifContentStatement() )* - < RBRACE >(< S >)* - { documentHandler.endEachDirective();} -} - -ArrayList stringList(): -{ - ArrayList strings = new ArrayList(); - Token input; -} -{ - (input = < IDENT > (< S >)*) - { strings.add(input.image); } - - (< COMMA >(< S >)* input = < IDENT > { strings.add(input.image); } (< S >)*)* - { return strings; } - -} - -void mixinDirective() : -{ - String name; - ArrayList args = null; - String body; -} -{ - - ()* - (name = property() - |(name = functionName() - args = arglist()) ()*) ()* - {documentHandler.startMixinDirective(name, args);} - ( ifContentStatement() | fontFace() | page())* - ()* - {documentHandler.endMixinDirective(name, args);} -} - -ArrayList arglist() : -{ - ArrayList args = new ArrayList(); - VariableNode arg; - boolean hasNonOptionalArgument = false; -} -{ - arg=mixinArg() ( ()* { hasNonOptionalArgument = checkMixinForNonOptionalArguments(arg, hasNonOptionalArgument); args.add(arg); } - arg=mixinArg() )* - { hasNonOptionalArgument = checkMixinForNonOptionalArguments(arg, hasNonOptionalArgument); args.add(arg); - return args; - } -} - -JAVACODE -boolean checkMixinForNonOptionalArguments(VariableNode arg, boolean hasNonOptionalArguments) { - boolean currentArgHasArguments = arg.getExpr() != null && arg.getExpr().getLexicalUnitType() == LexicalUnitImpl.SCSS_VARIABLE && arg.getExpr().getNextLexicalUnit() != null; - if(currentArgHasArguments) { - if(hasNonOptionalArguments) { throw new ParseException("Sass Error: Required argument $"+ arg.getName() +" must come before any optional arguments."); - } - return hasNonOptionalArguments; - }else { return true; - } -} - -VariableNode mixinArg() : -{ - String name; - Token variable = null; - LexicalUnitImpl first = null; - LexicalUnitImpl prev = null; - LexicalUnitImpl next = null; -} -{ - name=variableName() (< COLON > (< S >)* - - ( first = nonVariableTerm(null) { - prev = first; } - (LOOKAHEAD(3)(< COMMA >(< S >)*)? prev = nonVariableTerm(prev))* ) - | (variable = < VARIABLE >{ first = LexicalUnitImpl.createVariable(token.beginLine, token.beginColumn, - prev, variable.image);} - - ) - )? - { - VariableNode arg = new VariableNode(name, first, false); - return arg; - } -} - -ArrayList argValuelist() : -{ - ArrayList args = new ArrayList(); - LexicalUnitImpl first = null; - LexicalUnitImpl next = null; - LexicalUnitImpl prev = null; -} -{ - first = term(null) { args.add(first); prev = first;}((< COLON > (< S >)*)?next=term(prev){prev.setNextLexicalUnit(next); prev = next;})* - ( ()* - first = term(null) { args.add(first); prev = first;}((< COLON > (< S >)*)?next=term(prev){prev.setNextLexicalUnit(next); prev = next;})* - )* - {return args;} -} - -void includeDirective() : -{ - String name; - ArrayList args=null; -} -{ - - ()* - (name = property()|name = variableName(){ name = "$"+name;} - |(name = functionName() - args = argValuelist()) ()*) - ((";"()*)+ - {documentHandler.includeDirective(name, args);} - | ()* {documentHandler.startIncludeContentBlock(name, args);} - (styleRuleOrDeclarationOrNestedProperties() | keyframeSelector())* - ()* {documentHandler.endIncludeContentBlock();} - ) -} - -String interpolation() : -{ - Token n; -} -{ - n = < INTERPOLATION > - { - return n.image; - } -} - -void listModifyDirective() : -{ - String list = null; - String remove = null; - String separator = null; - String variable = null; - Token n = null; - Token type = null; -} -{ - //refactor, remove those 3 LOOKAHEAD(5). - n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)* - (type = < APPEND> | type = | type= )(< S >)* - (list = listModifyDirectiveArgs(0)) - (< RPARAN >)? < COMMA >(< S >)* - (remove = listModifyDirectiveArgs(1)) - ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)? - < RPARAN > - { - switch (type.kind) { - case APPEND: - documentHandler.appendDirective(variable,list,remove,separator); - break; - case REMOVE: - documentHandler.removeDirective(variable,list,remove,separator); - break; - case CONTAINS: - if(variable == null){ - variable = "$var_"+UUID.randomUUID(); - } - documentHandler.containsDirective(variable,list,remove,separator); - break; - default: - break; - } - } - (< S >)*< SEMICOLON >()* -} - - -/** - * @exception ParseException exception during the parse - */ -void appendDirective() : -{ - String list = null; - String remove = null; - String separator = null; - String variable = null; - Token n = null; -} -{ - n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)* - < APPEND >(< S >)* - (list = listModifyDirectiveArgs(0)) - (< RPARAN >)? < COMMA >(< S >)* - (remove = listModifyDirectiveArgs(1)) - ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)? - < RPARAN > - - { documentHandler.appendDirective(variable,list,remove,separator); } -} - -/** - * @exception ParseException exception during the parse - */ -void removeDirective() : -{ - String list = null; - String remove = null; - String separator = null; - String variable = null; - Token n = null; -} -{ - n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)* - < REMOVE >(< S >)* - (list = listModifyDirectiveArgs(0)) - (< RPARAN >)? < COMMA >(< S >)* - (remove = listModifyDirectiveArgs(1)) - ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)? - < RPARAN > - - { documentHandler.removeDirective(variable,list,remove,separator); } -} - -/** - * @exception ParseException exception during the parse - */ -String containsDirective() : -{ - String list = null; - String remove = null; - String separator = null; - String variable = null; - Token n = null; -} -{ - (n = < VARIABLE >{ variable = n.image; }(< S >)* ":" (< S >)*)? - < CONTAINS >(< S >)* - (list = listModifyDirectiveArgs(0)) - (< RPARAN >)? < COMMA >(< S >)* - (remove = listModifyDirectiveArgs(1)) - ( < COMMA >(< S >)* n = < IDENT >{ separator = n.image; } (< S >)*)? - < RPARAN > - - { /* - *if it is not in the form like "$contains : contains($items, .v-button);" - *for example in @if, like "@if (contains(a b c, b))", then create a temp - *variable for contains(a b c, b); - */ - if(variable == null){ - variable = "$var_"+UUID.randomUUID(); - } - documentHandler.containsDirective(variable,list,remove,separator); - return variable; - } -} - -JAVACODE -String listModifyDirectiveArgs(int nest) -{ - String list = ""; - int nesting = nest; - Token t = null; - - while(true) - { - t = getToken(1); - String s = t.image; - if(t.kind == VARIABLE||t.kind == IDENT) { - list += s; - }else if(s.toLowerCase().equals("auto")||s.toLowerCase().equals("space")||s.toLowerCase().equals("comma")) { - int i = 2; - Token temp = getToken(i); - boolean isLast = true; - while(temp.kind != SEMICOLON) - { if(temp.kind != RPARAN || temp.kind != S) - { isLast = false; } - i++; - temp = getToken(i); - } - - if(isLast) { return list; - } - } else if(t.kind == STRING) { list += s.substring(1,s.length()).substring(0,s.length()-2); - - }else if(t.kind == LPARAN) { nesting++; - if(nesting > nest+1) { throw new CSSParseException("Only one ( ) pair per parameter allowed", getLocator()); - } - }else if(t.kind == RPARAN) { nesting--; - if(nesting == 0) { - return list; - } - } else if(t.kind == COMMA) { - if(nesting == nest) { - return list; }else { - list += ","; } - - }else if(t.kind == S) { - list += " "; } else if(t.kind == LBRACE) { - throw new CSSParseException("Invalid token,'{' found", getLocator()); } - getNextToken(); - } -} - -Node returnDirective() : -{ - String raw; -} -{ - raw = skipStatement() - {return null;} -} - -void debuggingDirective() : -{} -{ - debugDirective() | warnDirective() -} - -void debugDirective() : -{} -{ - - { - String content = skipStatementUntilSemiColon(); - // TODO should evaluate the content expression, call documentHandler.debugDirective() etc. - System.out.println(content); - } - ()* -} - -void warnDirective() : -{} -{ - - { - String content = skipStatementUntilSemiColon(); - // TODO should evaluate the content expression, call documentHandler.warnDirective() etc. - System.err.println(content); - } - ()* -} - -Node forDirective() : -{ - String var; - String from; - String to; - boolean exclusive; - String body; - Token tok; -} -{ - var = variableName() - { - int[] toThrough = {TO, THROUGH}; - from = skipStatementUntil(toThrough); - } - (tok = {exclusive = true;} - | tok = {exclusive = false;}) - to = skipStatementUntilLeftBrace() - ()* - body = skipStatement() - {return documentHandler.forDirective(var, from, to, exclusive, body);} -} - -Node whileDirective() : -{ - String condition; - String body; -} -{ - condition = skipStatementUntilLeftBrace() - body = skipStatement() - { return documentHandler.whileDirective(condition, body);} -} - -void extendDirective() : -{ArrayList list;} -{ - - ()* - list = selectorList() - (";"()*)+ - {documentHandler.extendDirective(list);} -} - -void contentDirective() : -{} -{ - - ()* - (";"()*)+ - {documentHandler.contentDirective();} -} - -JAVACODE -Node importDirective(){ - return null; -} - -JAVACODE -Node charsetDirective(){ - return null; -} - -JAVACODE -Node mozDocumentDirective(){ - return null; -} - -JAVACODE -Node supportsDirective(){ - return null; -} - - -void nestedProperties(): -{String name; -LexicalUnit exp;} -{ - name=property() - ":" ( )* - ()* - { - documentHandler.startNestedProperties(name); - } - ( declaration() )? ( ";" ( )* ( declaration() )? )* - - { - documentHandler.endNestedProperties(name); - } - ()* -} -/** - * @exception ParseException exception during the parse - */ -void styleRuleOrDeclarationOrNestedProperties() : -{ -} -{ - try { - // differentiate between the colon of a pseudo and the colon of nested properties and the colon of a simple property - // first check if it is a normal styleRule, if not check if it is declarationOrNestedProperties(), if still fails, most likely, it is - // is styleRule with pseudo selector with contains functions. have to do it in this way, because both the styleRule and declarationOrNestedProperties() - // have 'skipStatementUntilXXX', which cannot be LOOKAHEAD properly. - ( debuggingDirective() | LOOKAHEAD(selectorList()) styleRule() | LOOKAHEAD(3)declarationOrNestedProperties() | styleRule()) - } catch (JumpException e) { - skipAfterExpression(); - // reportWarningSkipText(getLocator(), skipAfterExpression()); - } catch (ParseException e) { - if (errorHandler != null) { - if (e.currentToken != null) { - LocatorImpl li = new LocatorImpl(this, - e.currentToken.next.beginLine, - e.currentToken.next.beginColumn-1); - reportError(li, e); - } else { - reportError(getLocator(), e); - } - skipAfterExpression(); - /* - LocatorImpl loc = (LocatorImpl) getLocator(); - loc.column--; - reportWarningSkipText(loc, skipAfterExpression()); - */ - } else { - skipAfterExpression(); - } - } -} -/** - * @exception ParseException exception during the parse - */ -void declarationOrNestedProperties() : -{ boolean important = false; - String name; - LexicalUnitImpl exp; - Token save; - String comment = null; -} -{ - try { - name=property() - { save = token; } - ":" ( )* - (exp=expr() ( important=prio() )? - { - Token next = getToken(1); - if(next.kind == SEMICOLON || next.kind == RBRACE){ - while(next.kind == SEMICOLON){ - skipStatement(); - next = getToken(1); - } - //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); - } - } - } - | ()* - { - documentHandler.startNestedProperties(name); - } - ( declaration() )? ( ";" ( )* ( declaration() )? )* - ()* - { - documentHandler.endNestedProperties(name); - } - ) - - } catch (JumpException e) { - skipAfterExpression(); - // reportWarningSkipText(getLocator(), skipAfterExpression()); - } catch (NumberFormatException e) { - if (errorHandler != null) { - errorHandler.error(new CSSParseException("Invalid number " - + e.getMessage(), - getLocator(), - e)); - } - reportWarningSkipText(getLocator(), skipAfterExpression()); - } catch (ParseException e) { - if (errorHandler != null) { - if (e.currentToken != null) { - LocatorImpl li = new LocatorImpl(this, - e.currentToken.next.beginLine, - e.currentToken.next.beginColumn-1); - reportError(li, e); - } else { - reportError(getLocator(), e); - } - skipAfterExpression(); - /* - LocatorImpl loc = (LocatorImpl) getLocator(); - loc.column--; - reportWarningSkipText(loc, skipAfterExpression()); - */ - } else { - skipAfterExpression(); - } - } -} - -/** - * @exception ParseException exception during the parse - */ -void declaration() : -{ boolean important = false; - String name; - LexicalUnit exp; - Token save; -} -{ - try { - name=property() - { save = token; } - ":" ( )* exp=expr() ( important=prio() )? - { - documentHandler.property(name, exp, important); - } - } catch (JumpException e) { - skipAfterExpression(); - // reportWarningSkipText(getLocator(), skipAfterExpression()); - } catch (NumberFormatException e) { - if (errorHandler != null) { - errorHandler.error(new CSSParseException("Invalid number " - + e.getMessage(), - getLocator(), - e)); - } - reportWarningSkipText(getLocator(), skipAfterExpression()); - } catch (ParseException e) { - if (errorHandler != null) { - if (e.currentToken != null) { - LocatorImpl li = new LocatorImpl(this, - e.currentToken.next.beginLine, - e.currentToken.next.beginColumn-1); - reportError(li, e); - } else { - reportError(getLocator(), e); - } - skipAfterExpression(); - /* - LocatorImpl loc = (LocatorImpl) getLocator(); - loc.column--; - reportWarningSkipText(loc, skipAfterExpression()); - */ - } else { - skipAfterExpression(); - } - } -} - -/** - * @exception ParseException exception during the parse - */ -boolean prio() : -{} -{ - ( )* { return true; } -} - -boolean guarded() : -{} -{ - ()* {return true;} -} - -/** - * @exception ParseException exception during the parse - */ -LexicalUnitImpl operator(LexicalUnitImpl prev) : -{Token n;} -{ -/* (comments copied from basic_arithmetics.scss) -*supports: -* 1. standard arithmetic operations (+, -, *, /, %) -* 2. / is treated as css operator, unless one of its operands is variable or there is another binary arithmetic operator -*limits: -* 1. cannot mix arithmetic and css operations, e.g. "margin: 1px + 3px 2px" will fail -* 2. space between add and minus operator and their following operand is mandatory. e.g. "1 + 2" is valid, "1+2" is not -* 3. parenthesis is not supported now. -*/ -n="," ( )* { return LexicalUnitImpl.createComma(n.beginLine, - n.beginColumn, - prev); } -|n="/" ( )* { return LexicalUnitImpl.createSlash(n.beginLine, - n.beginColumn, - prev); } -| n="*" ( )* { return LexicalUnitImpl.createMultiply(n.beginLine, - n.beginColumn, - prev); } -| n="%" ( )* { return LexicalUnitImpl.createModulo(n.beginLine, - n.beginColumn, - prev); } -/* -* for '+', since it can be either a binary operator or an unary operator, -* which is ambiguous. To avoid this, the binary operator '+' always has -* a space before the following term. so '2+3' is not a valid binary expression, -* but '2 + 3' is. The same for '-' operator. -*/ - -| n="+" ( )+{ return LexicalUnitImpl.createAdd(n.beginLine, - n.beginColumn, - prev); } -| n="-" ( )+{ return LexicalUnitImpl.createMinus(n.beginLine, - n.beginColumn, - prev); } -} - -/** - * @exception ParseException exception during the parse - */ -LexicalUnitImpl expr() : -{ - LexicalUnitImpl first, res; - char op; -} -{ - first=term(null){ res = first; } - ( LOOKAHEAD(2) ( LOOKAHEAD(2) res=operator(res) )? res=term(res))* - { return first; } -} - -/** - * @exception ParseException exception during the parse - */ -char unaryOperator() : -{} -{ - "-" { return '-'; } -| "+" { return '+'; } -} - -/** - * @exception ParseException exception during the parse - */ -LexicalUnitImpl term(LexicalUnitImpl prev) : -{ LexicalUnitImpl result = null; - Token n = null; - char op = ' '; -} -{ - (result = nonVariableTerm(prev)| result = variableTerm(prev)) - { - return result; - } -} - -LexicalUnitImpl variableTerm(LexicalUnitImpl prev) : { - LexicalUnitImpl result = null; - String varName = ""; } { - varName = variableName() - {result = LexicalUnitImpl.createVariable(token.beginLine, token.beginColumn, - prev, varName); return result;} } - -LexicalUnitImpl nonVariableTerm(LexicalUnitImpl prev) : { LexicalUnitImpl result = null; - Token n = null; - char op = ' '; - String varName; - String s = ""; -} -{ -( ( ( - op=unaryOperator() )? - (n= - { result = LexicalUnitImpl.createNumber(n.beginLine, n.beginColumn, - prev, number(op, n, 0)); } - | n= - { result = LexicalUnitImpl.createPercentage(n.beginLine, n.beginColumn, - prev, number(op, n, 1)); } - | n= - { result = LexicalUnitImpl.createPT(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createCM(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createMM(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createPC(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createIN(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createPX(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createEMS(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createLEM(n.beginLine, n.beginColumn, - prev, number(op, n, 3)); } - | n= - { result = LexicalUnitImpl.createREM(n.beginLine, n.beginColumn, - prev, number(op, n, 3)); } - | n= - { result = LexicalUnitImpl.createEXS(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createDEG(n.beginLine, n.beginColumn, - prev, number(op, n, 3)); } - | n= - { result = LexicalUnitImpl.createRAD(n.beginLine, n.beginColumn, - prev, number(op, n, 3)); } - | n= - { result = LexicalUnitImpl.createGRAD(n.beginLine, n.beginColumn, - prev, number(op, n, 3)); } - | n= - { result = LexicalUnitImpl.createS(n.beginLine, n.beginColumn, - prev, number(op, n, 1)); } - | n= - { result = LexicalUnitImpl.createMS(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createHZ(n.beginLine, n.beginColumn, - prev, number(op, n, 2)); } - | n= - { result = LexicalUnitImpl.createKHZ(n.beginLine, n.beginColumn, - prev, number(op, n, 3)); } - | n= - { - s = n.image; - int i = 0; - while (i < s.length() - && (Character.isDigit(s.charAt(i)) || (s.charAt(i) == '.'))) { - i++; - } - - result = LexicalUnitImpl.createDimen(n.beginLine, n.beginColumn, prev, - number(op,n,s.length()-i), - s.substring(i)); - } - | result=function(op, prev) ) ) - | ( n= - { result = - LexicalUnitImpl.createString(n.beginLine, n.beginColumn, prev, - convertStringIndex(n.image, 1, - n.image.length() -1));} - | (< DOT >{ s+="."; })?(n= | n= | n= | n=) - { s += convertIdent(n.image); - if ("inherit".equals(s)) { - result = LexicalUnitImpl.createInherit(n.beginLine, n.beginColumn, - prev); - } else { - result = LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, - prev, convertIdent(n.image)); - } - - /* / - Auto correction code used in the CSS Validator but must not - be used by a conformant CSS2 parser. - * Common error : - * H1 { - * color : black - * background : white - * } - * - Token t = getToken(1); - Token semicolon = new Token(); - semicolon.kind = SEMICOLON; - semicolon.image = ";"; - if (t.kind == COLON) { - // @@SEEME. (generate a warning?) - // @@SEEME if expression is a single ident, - generate an error ? - rejectToken(semicolon); - - result = prev; - } - / */ - } - | result=hexcolor(prev) - | result=url(prev) - | result=unicode(prev) - ) ) ( )* - { - return result; } } - -/** - * Handle all CSS2 functions. - * @exception ParseException exception during the parse - */ -LexicalUnitImpl function(char operator, LexicalUnitImpl prev) : -{Token n; - LexicalUnit params = null; -} -{ - n= ( )* - { - String fname = convertIdent(n.image); - if("alpha(".equals(fname)){ - String body = skipStatementUntilSemiColon(); - return LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, - null, "alpha("+body); - }else if("expression(".equals(fname)){ - String body = skipStatementUntilSemiColon(); - return LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, - null, "expression("+body); - } - } - ( params=expr() )? ")" - { - if (operator != ' ') { - throw new CSSParseException("invalid operator before a function.", - getLocator()); - } - String f = convertIdent(n.image); - LexicalUnitImpl l = (LexicalUnitImpl) params; - boolean loop = true; - if ("rgb(".equals(f)) { - // this is a RGB declaration (e.g. rgb(255, 50%, 0) ) - int i = 0; - while (loop && l != null && i < 5) { - switch (i) { - case 0: - case 2: - case 4: - if ((l.getLexicalUnitType() != LexicalUnit.SAC_INTEGER) - && (l.getLexicalUnitType() != LexicalUnit.SAC_PERCENTAGE)) { - loop = false; - } - break; - case 1: - case 3: - if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { - loop = false; - } - break; - default: - throw new ParseException("implementation error"); - } - if (loop) { - l = (LexicalUnitImpl) l.getNextLexicalUnit(); - i ++; - } - } - if ((i == 5) && loop && (l == null)) { - return LexicalUnitImpl.createRGBColor(n.beginLine, - n.beginColumn, - prev, params); - } else { - if (errorHandler != null) { - String errorText; - Locator loc; - if (i < 5) { - if (params == null) { - loc = new LocatorImpl(this, n.beginLine, - n.beginColumn-1); - errorText = "not enough parameters."; - } else if (l == null) { - loc = new LocatorImpl(this, n.beginLine, - n.beginColumn-1); - errorText = "not enough parameters: " - + params.toString(); - } else { - loc = new LocatorImpl(this, l.getLineNumber(), - l.getColumnNumber()); - errorText = "invalid parameter: " - + l.toString(); - } - } else { - loc = new LocatorImpl(this, l.getLineNumber(), - l.getColumnNumber()); - errorText = "too many parameters: " - + l.toString(); - } - errorHandler.error(new CSSParseException(errorText, loc)); - } - - throw new JumpException(); - } - } else if ("counter".equals(f)) { - int i = 0; - while (loop && l != null && i < 3) { - switch (i) { - case 0: - case 2: - if (l.getLexicalUnitType() != LexicalUnit.SAC_IDENT) { - loop = false; - } - break; - case 1: - if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { - loop = false; - } - break; - default: - throw new ParseException("implementation error"); - } - l = (LexicalUnitImpl) l.getNextLexicalUnit(); - i ++; - } - if (((i == 1) || (i == 3)) && loop && (l == null)) { - return LexicalUnitImpl.createCounter(n.beginLine, n.beginColumn, - prev, params); - } - - } else if ("counters(".equals(f)) { - - int i = 0; - while (loop && l != null && i < 5) { - switch (i) { - case 0: - case 4: - if (l.getLexicalUnitType() != LexicalUnit.SAC_IDENT) { - loop = false; - } - break; - case 2: - if (l.getLexicalUnitType() != LexicalUnit.SAC_STRING_VALUE) { - loop = false; - } - break; - case 1: - case 3: - if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { - loop = false; - } - break; - default: - throw new ParseException("implementation error"); - } - l = (LexicalUnitImpl) l.getNextLexicalUnit(); - i ++; - } - if (((i == 3) || (i == 5)) && loop && (l == null)) { - return LexicalUnitImpl.createCounters(n.beginLine, n.beginColumn, - prev, params); - } - } else if ("attr(".equals(f)) { - if ((l != null) - && (l.getNextLexicalUnit() == null) - && (l.getLexicalUnitType() == LexicalUnit.SAC_IDENT)) { - return LexicalUnitImpl.createAttr(l.getLineNumber(), - l.getColumnNumber(), - prev, l.getStringValue()); - } - } else if ("rect(".equals(f)) { - int i = 0; - while (loop && l != null && i < 7) { - switch (i) { - case 0: - case 2: - case 4: - case 6: - switch (l.getLexicalUnitType()) { - case LexicalUnit.SAC_INTEGER: - if (l.getIntegerValue() != 0) { - loop = false; - } - break; - case LexicalUnit.SAC_IDENT: - if (!l.getStringValue().equals("auto")) { - loop = false; - } - break; - case LexicalUnit.SAC_EM: - case LexicalUnit.SAC_EX: - case LexicalUnit.SAC_PIXEL: - case LexicalUnit.SAC_CENTIMETER: - case LexicalUnit.SAC_MILLIMETER: - case LexicalUnit.SAC_INCH: - case LexicalUnit.SAC_POINT: - case LexicalUnit.SAC_PICA: - // nothing - break; - default: - loop = false; - } - break; - case 1: - case 3: - case 5: - if (l.getLexicalUnitType() != LexicalUnit.SAC_OPERATOR_COMMA) { - loop = false; - } - break; - default: - throw new ParseException("implementation error"); - } - l = (LexicalUnitImpl) l.getNextLexicalUnit(); - i ++; - } - if ((i == 7) && loop && (l == null)) { - return LexicalUnitImpl.createRect(n.beginLine, n.beginColumn, - prev, params); - } - } - return LexicalUnitImpl.createFunction(n.beginLine, n.beginColumn, prev, - f.substring(0, - f.length() -1), - params); - } -} - -LexicalUnitImpl unicode(LexicalUnitImpl prev) : -{ Token n; -} -{ - n= - { - LexicalUnitImpl params = null; - String s = n.image.substring(2); - int index = s.indexOf('-'); - if (index == -1) { - params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, - params, Integer.parseInt(s, 16)); - } else { - String s1 = s.substring(0, index); - String s2 = s.substring(index); - - params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, - params, Integer.parseInt(s1, 16)); - params = LexicalUnitImpl.createInteger(n.beginLine, n.beginColumn, - params, Integer.parseInt(s2, 16)); - } - - return LexicalUnitImpl.createUnicodeRange(n.beginLine, n.beginColumn, - prev, params); - } -} - -LexicalUnitImpl url(LexicalUnitImpl prev) : -{ Token n; -} -{ - n= - { - String urlname = n.image.substring(4, n.image.length()-1).trim(); - return LexicalUnitImpl.createURL(n.beginLine, n.beginColumn, prev, urlname); - } -} - -/** - * @exception ParseException exception during the parse - */ -LexicalUnitImpl hexcolor(LexicalUnitImpl prev) : -{Token n; -} -{ - n= - { - int r; - LexicalUnitImpl first, params = null; - String s = n.image.substring(1); - - if(s.length()!=3 && s.length()!=6) { - first = null; - throw new CSSParseException("invalid hexadecimal notation for RGB: " + s, - getLocator()); - } - return LexicalUnitImpl.createIdent(n.beginLine, n.beginColumn, - prev, n.image); - } -} - -JAVACODE -float number(char operator, Token n, int lengthUnit) { - String image = n.image; - float f = 0; - - if (lengthUnit != 0) { - image = image.substring(0, image.length() - lengthUnit); - } - f = Float.valueOf(image).floatValue(); - return (operator == '-')? -f: f; -} - -JAVACODE -String skipStatementUntilSemiColon(){ - int[] semicolon = {SEMICOLON}; - return skipStatementUntil(semicolon); -} - -JAVACODE -String skipStatementUntilLeftBrace(){ - int[] lBrace = {LBRACE}; - return skipStatementUntil(lBrace); -} - -JAVACODE -String skipStatementUntilMatchingRightParan(){ - int[] leftTokens = {LPARAN, FUNCTION}; // a FUNCTION also contains "(" - int[] rightTokens = {RPARAN}; - StringBuffer s = new StringBuffer(); - int difference = 1; - Token tok; - while(difference != 0){ - tok = getToken(1); - if(tok.kind == EOF) { - return null; - } - for(int sym : leftTokens){ - if(tok.kind == sym){ - difference++; - } - } - for(int sym : rightTokens){ - if(tok.kind == sym){ - difference--; - } - } - if(difference != 0){ - if (tok.image != null) { - s.append(tok.image); - } - getNextToken(); - } - } - return s.toString().trim(); -} - -JAVACODE -String skipStatementUntil(int[] symbols){ - StringBuffer s = new StringBuffer(); - boolean stop = false; - Token tok; - while(!stop){ - tok = getToken(1); - if(tok.kind == EOF) { - return null; - } - for(int sym : symbols){ - if(tok.kind == sym){ - stop = true; - break; - } - } - if(!stop){ - if (tok.image != null) { - s.append(tok.image); - } - getNextToken(); - } - } - return s.toString().trim(); -} - - -JAVACODE -String skipStatement() { - StringBuffer s = new StringBuffer(); - Token tok = getToken(0); - if (tok.image != null) { - s.append(tok.image); - } - while (true) { - tok = getToken(1); - if (tok.kind == EOF) { - return null; - } - s.append(tok.image); - if (tok.kind == LBRACE) { - getNextToken(); - s.append(skip_to_matching_brace()); - getNextToken(); - tok = getToken(1); - break; - } else if (tok.kind == RBRACE) { - getNextToken(); - tok = getToken(1); - break; - } else if (tok.kind == SEMICOLON) { - getNextToken(); - tok = getToken(1); - break; - } - getNextToken(); - } - - // skip white space - while (true) { - if (tok.kind != S) { - break; - } - tok = getNextToken(); - tok = getToken(1); - } - - return s.toString().trim(); -} - -JAVACODE -String skip_to_matching_brace() { - StringBuffer s = new StringBuffer(); - Token tok; - int nesting = 1; - while (true) { - tok = getToken(1); - if (tok.kind == EOF) { - break; - } - s.append(tok.image); - if (tok.kind == LBRACE) { - nesting++; - } else if (tok.kind == RBRACE) { - nesting--; - if (nesting == 0) { - break; - } - } - getNextToken(); - } - return s.toString(); -} - -/* - * Here I handle all CSS2 unicode character stuffs. - * I convert all \XXXXXX character into a single character. - * Don't forget that the parser has recognize the token before. - * (So IDENT won't contain newline and stuffs like this). - */ -JAVACODE -String convertStringIndex(String s, int start, int len) { - StringBuffer buf = new StringBuffer(len); - int index = start; - - while (index < len) { - char c = s.charAt(index); - if (c == '\\') { - if (++index < len) { - c = s.charAt(index); - switch (c) { - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': - case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': - buf.append('\\'); - while (index < len) { - buf.append(s.charAt(index++)); - } - break; - case '\n': - case '\f': - break; - case '\r': - if (index + 1 < len) { - if (s.charAt(index + 1) == '\n') { - index ++; - } - } - break; - default: - buf.append(c); - } - } else { - throw new CSSParseException("invalid string " + s, getLocator()); - } - } else { - buf.append(c); - } - index++; - } - - return buf.toString(); -} - -JAVACODE -String convertIdent(String s) { - return convertStringIndex(s, 0, s.length()); -} - -JAVACODE -String convertString(String s) { - return convertStringIndex(s, 0, s.length()); -} - -JAVACODE -void comments(){ - /*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) { - documentHandler.comment(tmp_t.image); - tmp_t = tmp_t.next; - } - } -} - -/* - * @@HACK - * I can't insert a token into the tokens flow. - * It's jj_consume_token implementation dependant! :-( - */ -JAVACODE -void rejectToken(Token t) { - Token fakeToken = new Token(); - t.next = token; - fakeToken.next = t; - token = fakeToken; -} - -/** - * skip after an expression - */ -JAVACODE -String skipAfterExpression() { - Token t = getToken(1); - StringBuffer s = new StringBuffer(); - s.append(getToken(0).image); - - while ((t.kind != RBRACE) && (t.kind != SEMICOLON) && (t.kind != EOF)) { - s.append(t.image); - getNextToken(); - t = getToken(1); - } - - return s.toString(); -} - -/** - * The following functions are useful for a DOM CSS implementation only and are - * not part of the general CSS2 parser. - */ -// TODO required by original parser but not used by Vaadin? -void _parseRule() : -{String ret = null; -} -{ - ( )* - ( importDeclaration() | debuggingDirective() | styleRule() | media() | page() | fontFace() | ret=skipStatement() - { - if ((ret == null) || (ret.length() == 0)) { - return; - } - if (ret.charAt(0) == '@') { - documentHandler.unrecognizedRule(ret); - } else { - throw new CSSParseException("unrecognize rule: " + ret, - getLocator()); - } - } - ) -} - -void _parseImportRule() : -{ -} -{ - ( )* importDeclaration() -} - -void _parseMediaRule() : -{ -} -{ - ( )* media() -} - -void _parseDeclarationBlock() : -{ -} -{ - ( )* - ( declaration() )? ( ";" ( )* ( declaration() )? )* - } - -ArrayList _parseSelectors() : -{ ArrayList p = null; -} -{ - try { - ( )* p = selectorList() - { return p; } - } catch (ThrowedParseException e) { - throw (ParseException) e.e.fillInStackTrace(); - } -} - -/* - * Local Variables: - * compile-command: javacc Parser.jj & javac Parser.java - * End: - */ diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java b/theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java new file mode 100644 index 0000000000..d54ab4fa7e --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/ParserTokenManager.java @@ -0,0 +1,4997 @@ +/* + * 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. ParserTokenManager.java */ +package com.vaadin.sass.internal.parser; +import java.io.*; +import java.net.*; +import java.util.ArrayList; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; +import org.w3c.css.sac.ConditionFactory; +import org.w3c.css.sac.Condition; +import org.w3c.css.sac.SelectorFactory; +import org.w3c.css.sac.SelectorList; +import org.w3c.css.sac.Selector; +import org.w3c.css.sac.SimpleSelector; +import org.w3c.css.sac.DocumentHandler; +import org.w3c.css.sac.InputSource; +import org.w3c.css.sac.ErrorHandler; +import org.w3c.css.sac.CSSException; +import org.w3c.css.sac.CSSParseException; +import org.w3c.css.sac.Locator; +import org.w3c.css.sac.LexicalUnit; +import org.w3c.flute.parser.selectors.SelectorFactoryImpl; +import org.w3c.flute.parser.selectors.ConditionFactoryImpl; +import org.w3c.flute.util.Encoding; +import com.vaadin.sass.internal.handler.*; +import com.vaadin.sass.internal.tree.*; + +/** Token Manager. */ +public class ParserTokenManager implements ParserConstants +{ + + /** Debug output. */ + public java.io.PrintStream debugStream = System.out; + /** Set debug output. */ + public void setDebugStream(java.io.PrintStream ds) { debugStream = ds; } +private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1) +{ + switch (pos) + { + case 0: + if ((active0 & 0xffe0000000000000L) != 0L || (active1 & 0x3e0000000fL) != 0L) + return 162; + if ((active0 & 0xe000000000000L) != 0L || (active1 & 0x20L) != 0L) + { + jjmatchedKind = 72; + return 522; + } + if ((active0 & 0x80000000L) != 0L) + return 523; + if ((active0 & 0x10000000000000L) != 0L) + { + jjmatchedKind = 72; + return 29; + } + if ((active0 & 0x4000L) != 0L) + return 75; + if ((active0 & 0x2000010L) != 0L) + return 216; + if ((active0 & 0x80200L) != 0L) + return 38; + if ((active0 & 0x2000000000L) != 0L) + return 524; + return -1; + case 1: + if ((active1 & 0x2L) != 0L) + return 174; + if ((active0 & 0xffe0000000000000L) != 0L || (active1 & 0x3e0000000dL) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 1; + return 525; + } + if ((active0 & 0x14000000000000L) != 0L) + { + jjmatchedKind = 72; + jjmatchedPos = 1; + return 522; + } + if ((active0 & 0xa000000000000L) != 0L || (active1 & 0x20L) != 0L) + return 522; + if ((active0 & 0x10L) != 0L) + return 221; + return -1; + case 2: + if ((active0 & 0xbfe0000000000000L) != 0L || (active1 & 0x3e0000000dL) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 2; + return 525; + } + if ((active0 & 0x4000000000000000L) != 0L) + return 525; + if ((active1 & 0x2L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 2; + return 173; + } + if ((active0 & 0x14000000000000L) != 0L) + { + jjmatchedKind = 72; + jjmatchedPos = 2; + return 522; + } + return -1; + case 3: + if ((active0 & 0xb7e0000000000000L) != 0L || (active1 & 0x3e0000000dL) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 3; + return 525; + } + if ((active0 & 0x800000000000000L) != 0L) + return 525; + if ((active0 & 0x4000000000000L) != 0L) + { + jjmatchedKind = 72; + jjmatchedPos = 3; + return 522; + } + if ((active0 & 0x10000000000000L) != 0L) + return 522; + if ((active1 & 0x2L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 3; + return 172; + } + return -1; + case 4: + if ((active0 & 0x9400000000000000L) != 0L || (active1 & 0x1000000000L) != 0L) + return 525; + if ((active1 & 0x2L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 4; + return 171; + } + if ((active0 & 0x4000000000000L) != 0L) + { + jjmatchedKind = 72; + jjmatchedPos = 4; + return 522; + } + if ((active0 & 0x23e0000000000000L) != 0L || (active1 & 0x2e0000000dL) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 4; + return 525; + } + return -1; + case 5: + if ((active1 & 0x2L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 5; + return 170; + } + if ((active0 & 0x4000000000000L) != 0L) + { + jjmatchedKind = 72; + jjmatchedPos = 5; + return 522; + } + if ((active0 & 0x2220000000000000L) != 0L || (active1 & 0x400000000L) != 0L) + return 525; + if ((active0 & 0x1c0000000000000L) != 0L || (active1 & 0x2a0000000dL) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 5; + return 525; + } + return -1; + case 6: + if ((active0 & 0x100000000000000L) != 0L || (active1 & 0x200000001L) != 0L) + return 525; + if ((active0 & 0x4000000000000L) != 0L) + return 522; + if ((active0 & 0xc0000000000000L) != 0L || (active1 & 0x280000000eL) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 6; + return 525; + } + return -1; + case 7: + if ((active0 & 0x40000000000000L) != 0L || (active1 & 0x800000008L) != 0L) + return 525; + if ((active0 & 0x80000000000000L) != 0L || (active1 & 0x2000000006L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 7; + return 525; + } + return -1; + case 8: + if ((active1 & 0x2000000002L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 8; + return 525; + } + if ((active0 & 0x80000000000000L) != 0L || (active1 & 0x4L) != 0L) + return 525; + return -1; + case 9: + if ((active1 & 0x2L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 9; + return 525; + } + if ((active1 & 0x2000000000L) != 0L) + return 525; + return -1; + case 10: + if ((active1 & 0x2L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 10; + return 525; + } + return -1; + case 11: + if ((active1 & 0x2L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 11; + return 525; + } + return -1; + case 12: + if ((active1 & 0x2L) != 0L) + { + jjmatchedKind = 103; + jjmatchedPos = 12; + return 525; + } + return -1; + default : + return -1; + } +} +private final int jjStartNfa_0(int pos, long active0, long active1) +{ + return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1), pos + 1); +} +private int jjStopAtPos(int pos, int kind) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + return pos + 1; +} +private int jjMoveStringLiteralDfa0_0() +{ + switch(curChar) + { + case 33: + return jjMoveStringLiteralDfa1_0(0x2000000000L, 0x0L); + case 36: + return jjMoveStringLiteralDfa1_0(0x4000L, 0x0L); + case 37: + return jjStopAtPos(0, 29); + case 38: + jjmatchedKind = 30; + return jjMoveStringLiteralDfa1_0(0x1000000000L, 0x0L); + case 40: + return jjStopAtPos(0, 32); + case 41: + return jjStopAtPos(0, 33); + case 42: + jjmatchedKind = 28; + return jjMoveStringLiteralDfa1_0(0x8000L, 0x0L); + case 43: + return jjStopAtPos(0, 18); + case 44: + return jjStopAtPos(0, 20); + case 45: + jjmatchedKind = 19; + return jjMoveStringLiteralDfa1_0(0x200L, 0x0L); + case 46: + return jjStartNfaWithStates_0(0, 31, 523); + case 47: + jjmatchedKind = 25; + return jjMoveStringLiteralDfa1_0(0x10L, 0x0L); + case 58: + return jjStopAtPos(0, 38); + case 59: + return jjStopAtPos(0, 21); + case 60: + jjmatchedKind = 24; + return jjMoveStringLiteralDfa1_0(0x100L, 0x0L); + case 61: + jjmatchedKind = 17; + return jjMoveStringLiteralDfa1_0(0x400000000L, 0x0L); + case 62: + return jjStopAtPos(0, 22); + case 64: + return jjMoveStringLiteralDfa1_0(0xffe0000000000000L, 0x3e0000000fL); + case 91: + return jjStopAtPos(0, 26); + case 93: + return jjStopAtPos(0, 27); + case 94: + return jjMoveStringLiteralDfa1_0(0x2000L, 0x0L); + case 70: + case 102: + return jjMoveStringLiteralDfa1_0(0x10000000000000L, 0x0L); + case 73: + case 105: + return jjMoveStringLiteralDfa1_0(0x8000000000000L, 0x20L); + case 84: + case 116: + return jjMoveStringLiteralDfa1_0(0x6000000000000L, 0x0L); + case 123: + return jjStopAtPos(0, 10); + case 124: + return jjMoveStringLiteralDfa1_0(0x800001000L, 0x0L); + case 125: + return jjStopAtPos(0, 11); + case 126: + jjmatchedKind = 23; + return jjMoveStringLiteralDfa1_0(0x10000L, 0x0L); + default : + return jjMoveNfa_0(24, 0); + } +} +private int jjMoveStringLiteralDfa1_0(long active0, long active1) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(0, active0, active1); + return 1; + } + switch(curChar) + { + case 33: + return jjMoveStringLiteralDfa2_0(active0, 0x100L, active1, 0L); + case 38: + if ((active0 & 0x1000000000L) != 0L) + return jjStopAtPos(1, 36); + break; + case 42: + if ((active0 & 0x10L) != 0L) + return jjStartNfaWithStates_0(1, 4, 221); + break; + case 45: + return jjMoveStringLiteralDfa2_0(active0, 0x200L, active1, 0x2L); + case 61: + if ((active0 & 0x1000L) != 0L) + return jjStopAtPos(1, 12); + else if ((active0 & 0x2000L) != 0L) + return jjStopAtPos(1, 13); + else if ((active0 & 0x4000L) != 0L) + return jjStopAtPos(1, 14); + else if ((active0 & 0x8000L) != 0L) + return jjStopAtPos(1, 15); + else if ((active0 & 0x10000L) != 0L) + return jjStopAtPos(1, 16); + else if ((active0 & 0x400000000L) != 0L) + return jjStopAtPos(1, 34); + else if ((active0 & 0x2000000000L) != 0L) + return jjStopAtPos(1, 37); + break; + case 67: + case 99: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x800000008L); + case 68: + case 100: + return jjMoveStringLiteralDfa2_0(active0, 0x200000000000000L, active1, 0L); + case 69: + case 101: + return jjMoveStringLiteralDfa2_0(active0, 0x9000000000000000L, active1, 0x1L); + case 70: + case 102: + if ((active1 & 0x20L) != 0L) + return jjStartNfaWithStates_0(1, 69, 522); + return jjMoveStringLiteralDfa2_0(active0, 0x880000000000000L, active1, 0x2000000000L); + case 72: + case 104: + return jjMoveStringLiteralDfa2_0(active0, 0x4000000000000L, active1, 0L); + case 73: + case 105: + return jjMoveStringLiteralDfa2_0(active0, 0x4040000000000000L, active1, 0x200000000L); + case 77: + case 109: + return jjMoveStringLiteralDfa2_0(active0, 0x20000000000000L, active1, 0x400000000L); + case 78: + case 110: + if ((active0 & 0x8000000000000L) != 0L) + return jjStartNfaWithStates_0(1, 51, 522); + break; + case 79: + case 111: + if ((active0 & 0x2000000000000L) != 0L) + return jjStartNfaWithStates_0(1, 49, 522); + break; + case 80: + case 112: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x1000000000L); + case 82: + case 114: + return jjMoveStringLiteralDfa2_0(active0, 0x110000000000000L, active1, 0L); + case 83: + case 115: + return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x4L); + case 87: + case 119: + return jjMoveStringLiteralDfa2_0(active0, 0x2400000000000000L, active1, 0L); + case 124: + if ((active0 & 0x800000000L) != 0L) + return jjStopAtPos(1, 35); + break; + default : + break; + } + return jjStartNfa_0(0, active0, active1); +} +private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1) +{ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjStartNfa_0(0, old0, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(1, active0, active1); + return 2; + } + switch(curChar) + { + case 45: + return jjMoveStringLiteralDfa3_0(active0, 0x100L, active1, 0L); + case 62: + if ((active0 & 0x200L) != 0L) + return jjStopAtPos(2, 9); + break; + case 65: + case 97: + return jjMoveStringLiteralDfa3_0(active0, 0x1400000000000000L, active1, 0x1000000000L); + case 69: + case 101: + return jjMoveStringLiteralDfa3_0(active0, 0x300000000000000L, active1, 0x400000000L); + case 70: + case 102: + if ((active0 & 0x4000000000000000L) != 0L) + return jjStartNfaWithStates_0(2, 62, 525); + break; + case 72: + case 104: + return jjMoveStringLiteralDfa3_0(active0, 0x2000000000000000L, active1, 0x800000000L); + case 73: + case 105: + return jjMoveStringLiteralDfa3_0(active0, 0x20000000000000L, active1, 0L); + case 76: + case 108: + return jjMoveStringLiteralDfa3_0(active0, 0x8000000000000000L, active1, 0L); + case 77: + case 109: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200000002L); + case 78: + case 110: + return jjMoveStringLiteralDfa3_0(active0, 0x40000000000000L, active1, 0L); + case 79: + case 111: + return jjMoveStringLiteralDfa3_0(active0, 0x810000000000000L, active1, 0x2000000008L); + case 82: + case 114: + return jjMoveStringLiteralDfa3_0(active0, 0x4000000000000L, active1, 0L); + case 85: + case 117: + return jjMoveStringLiteralDfa3_0(active0, 0x80000000000000L, active1, 0x4L); + case 88: + case 120: + return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x1L); + default : + break; + } + return jjStartNfa_0(1, active0, active1); +} +private int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1) +{ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjStartNfa_0(1, old0, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(2, active0, active1); + return 3; + } + switch(curChar) + { + case 45: + if ((active0 & 0x100L) != 0L) + return jjStopAtPos(3, 8); + break; + case 65: + case 97: + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x800000000L); + case 66: + case 98: + return jjMoveStringLiteralDfa4_0(active0, 0x200000000000000L, active1, 0L); + case 67: + case 99: + return jjMoveStringLiteralDfa4_0(active0, 0x1040000000000000L, active1, 0L); + case 68: + case 100: + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x400000000L); + case 71: + case 103: + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x1000000000L); + case 73: + case 105: + return jjMoveStringLiteralDfa4_0(active0, 0x2000000000000000L, active1, 0L); + case 77: + case 109: + if ((active0 & 0x10000000000000L) != 0L) + return jjStartNfaWithStates_0(3, 52, 522); + break; + case 78: + case 110: + return jjMoveStringLiteralDfa4_0(active0, 0x80000000000000L, active1, 0x2000000008L); + case 79: + case 111: + return jjMoveStringLiteralDfa4_0(active0, 0x4000000000000L, active1, 0x2L); + case 80: + case 112: + return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000004L); + case 82: + case 114: + if ((active0 & 0x800000000000000L) != 0L) + return jjStartNfaWithStates_0(3, 59, 525); + return jjMoveStringLiteralDfa4_0(active0, 0x400000000000000L, active1, 0L); + case 83: + case 115: + return jjMoveStringLiteralDfa4_0(active0, 0x8000000000000000L, active1, 0L); + case 84: + case 116: + return jjMoveStringLiteralDfa4_0(active0, 0x100000000000000L, active1, 0x1L); + case 88: + case 120: + return jjMoveStringLiteralDfa4_0(active0, 0x20000000000000L, active1, 0L); + default : + break; + } + return jjStartNfa_0(2, active0, active1); +} +private int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long active1) +{ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjStartNfa_0(2, old0, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(3, active0, active1); + return 4; + } + switch(curChar) + { + case 67: + case 99: + return jjMoveStringLiteralDfa5_0(active0, 0x80000000000000L, active1, 0L); + case 69: + case 101: + if ((active0 & 0x8000000000000000L) != 0L) + return jjStartNfaWithStates_0(4, 63, 525); + else if ((active1 & 0x1000000000L) != 0L) + return jjStartNfaWithStates_0(4, 100, 525); + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x1L); + case 72: + case 104: + if ((active0 & 0x1000000000000000L) != 0L) + return jjStartNfaWithStates_0(4, 60, 525); + break; + case 73: + case 105: + return jjMoveStringLiteralDfa5_0(active0, 0x20000000000000L, active1, 0x400000000L); + case 76: + case 108: + return jjMoveStringLiteralDfa5_0(active0, 0x2040000000000000L, active1, 0L); + case 78: + case 110: + if ((active0 & 0x400000000000000L) != 0L) + return jjStartNfaWithStates_0(4, 58, 525); + break; + case 79: + case 111: + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x200000000L); + case 80: + case 112: + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4L); + case 82: + case 114: + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x800000000L); + case 84: + case 116: + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2000000008L); + case 85: + case 117: + return jjMoveStringLiteralDfa5_0(active0, 0x304000000000000L, active1, 0L); + case 90: + case 122: + return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x2L); + default : + break; + } + return jjStartNfa_0(3, active0, active1); +} +private int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long active1) +{ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjStartNfa_0(3, old0, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(4, active0, active1); + return 5; + } + switch(curChar) + { + case 45: + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x2000000002L); + case 65: + case 97: + if ((active1 & 0x400000000L) != 0L) + return jjStartNfaWithStates_0(5, 98, 525); + break; + case 69: + case 101: + if ((active0 & 0x2000000000000000L) != 0L) + return jjStartNfaWithStates_0(5, 61, 525); + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x8L); + case 71: + case 103: + if ((active0 & 0x200000000000000L) != 0L) + return jjStartNfaWithStates_0(5, 57, 525); + return jjMoveStringLiteralDfa6_0(active0, 0x4000000000000L, active1, 0L); + case 78: + case 110: + if ((active0 & 0x20000000000000L) != 0L) + return jjStartNfaWithStates_0(5, 53, 525); + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1L); + case 79: + case 111: + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x4L); + case 82: + case 114: + return jjMoveStringLiteralDfa6_0(active0, 0x100000000000000L, active1, 0x200000000L); + case 83: + case 115: + return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x800000000L); + case 84: + case 116: + return jjMoveStringLiteralDfa6_0(active0, 0x80000000000000L, active1, 0L); + case 85: + case 117: + return jjMoveStringLiteralDfa6_0(active0, 0x40000000000000L, active1, 0L); + default : + break; + } + return jjStartNfa_0(4, active0, active1); +} +private int jjMoveStringLiteralDfa6_0(long old0, long active0, long old1, long active1) +{ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjStartNfa_0(4, old0, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(5, active0, active1); + return 6; + } + switch(curChar) + { + case 68: + case 100: + if ((active1 & 0x1L) != 0L) + return jjStartNfaWithStates_0(6, 64, 525); + return jjMoveStringLiteralDfa7_0(active0, 0x40000000000000L, active1, 0x2L); + case 69: + case 101: + return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800000000L); + case 70: + case 102: + return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x2000000000L); + case 72: + case 104: + if ((active0 & 0x4000000000000L) != 0L) + return jjStartNfaWithStates_0(6, 50, 522); + break; + case 73: + case 105: + return jjMoveStringLiteralDfa7_0(active0, 0x80000000000000L, active1, 0L); + case 78: + case 110: + if ((active0 & 0x100000000000000L) != 0L) + return jjStartNfaWithStates_0(6, 56, 525); + return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x8L); + case 82: + case 114: + return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x4L); + case 84: + case 116: + if ((active1 & 0x200000000L) != 0L) + return jjStartNfaWithStates_0(6, 97, 525); + break; + default : + break; + } + return jjStartNfa_0(5, active0, active1); +} +private int jjMoveStringLiteralDfa7_0(long old0, long active0, long old1, long active1) +{ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjStartNfa_0(5, old0, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(6, active0, active1); + return 7; + } + switch(curChar) + { + case 65: + case 97: + return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x2000000000L); + case 69: + case 101: + if ((active0 & 0x40000000000000L) != 0L) + return jjStartNfaWithStates_0(7, 54, 525); + break; + case 79: + case 111: + return jjMoveStringLiteralDfa8_0(active0, 0x80000000000000L, active1, 0x2L); + case 84: + case 116: + if ((active1 & 0x8L) != 0L) + return jjStartNfaWithStates_0(7, 67, 525); + else if ((active1 & 0x800000000L) != 0L) + return jjStartNfaWithStates_0(7, 99, 525); + return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x4L); + default : + break; + } + return jjStartNfa_0(6, active0, active1); +} +private int jjMoveStringLiteralDfa8_0(long old0, long active0, long old1, long active1) +{ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjStartNfa_0(6, old0, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(7, active0, active1); + return 8; + } + switch(curChar) + { + case 67: + case 99: + return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x2000000002L); + case 78: + case 110: + if ((active0 & 0x80000000000000L) != 0L) + return jjStartNfaWithStates_0(8, 55, 525); + break; + case 83: + case 115: + if ((active1 & 0x4L) != 0L) + return jjStartNfaWithStates_0(8, 66, 525); + break; + default : + break; + } + return jjStartNfa_0(7, active0, active1); +} +private int jjMoveStringLiteralDfa9_0(long old0, long active0, long old1, long active1) +{ + if (((active0 &= old0) | (active1 &= old1)) == 0L) + return jjStartNfa_0(7, old0, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(8, 0L, active1); + return 9; + } + switch(curChar) + { + case 69: + case 101: + if ((active1 & 0x2000000000L) != 0L) + return jjStartNfaWithStates_0(9, 101, 525); + break; + case 85: + case 117: + return jjMoveStringLiteralDfa10_0(active1, 0x2L); + default : + break; + } + return jjStartNfa_0(8, 0L, active1); +} +private int jjMoveStringLiteralDfa10_0(long old1, long active1) +{ + if (((active1 &= old1)) == 0L) + return jjStartNfa_0(8, 0L, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(9, 0L, active1); + return 10; + } + switch(curChar) + { + case 77: + case 109: + return jjMoveStringLiteralDfa11_0(active1, 0x2L); + default : + break; + } + return jjStartNfa_0(9, 0L, active1); +} +private int jjMoveStringLiteralDfa11_0(long old1, long active1) +{ + if (((active1 &= old1)) == 0L) + return jjStartNfa_0(9, 0L, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(10, 0L, active1); + return 11; + } + switch(curChar) + { + case 69: + case 101: + return jjMoveStringLiteralDfa12_0(active1, 0x2L); + default : + break; + } + return jjStartNfa_0(10, 0L, active1); +} +private int jjMoveStringLiteralDfa12_0(long old1, long active1) +{ + if (((active1 &= old1)) == 0L) + return jjStartNfa_0(10, 0L, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(11, 0L, active1); + return 12; + } + switch(curChar) + { + case 78: + case 110: + return jjMoveStringLiteralDfa13_0(active1, 0x2L); + default : + break; + } + return jjStartNfa_0(11, 0L, active1); +} +private int jjMoveStringLiteralDfa13_0(long old1, long active1) +{ + if (((active1 &= old1)) == 0L) + return jjStartNfa_0(11, 0L, old1); + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + jjStopStringLiteralDfa_0(12, 0L, active1); + return 13; + } + switch(curChar) + { + case 84: + case 116: + if ((active1 & 0x2L) != 0L) + return jjStartNfaWithStates_0(13, 65, 525); + break; + default : + break; + } + return jjStartNfa_0(12, 0L, active1); +} +private int jjStartNfaWithStates_0(int pos, int kind, int state) +{ + jjmatchedKind = kind; + jjmatchedPos = pos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return pos + 1; } + return jjMoveNfa_0(state, pos + 1); +} +static final long[] jjbitVec0 = { + 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL +}; +private int jjMoveNfa_0(int startState, int curPos) +{ + int startsAt = 0; + jjnewStateCnt = 522; + int i = 1; + jjstateSet[0] = startState; + int kind = 0x7fffffff; + for (;;) + { + if (++jjround == 0x7fffffff) + ReInitRounds(); + if (curChar < 64) + { + long l = 1L << curChar; + do + { + switch(jjstateSet[--i]) + { + case 524: + if ((0x100003600L & l) != 0L) + jjCheckNAddTwoStates(256, 265); + if ((0x100003600L & l) != 0L) + jjCheckNAddTwoStates(248, 255); + break; + case 162: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 108; + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 213; + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 201; + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 185; + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 174; + break; + case 29: + if ((0x3ff200000000000L & l) != 0L) + jjCheckNAddStates(0, 3); + else if ((0x100003600L & l) != 0L) + jjCheckNAddTwoStates(236, 237); + else if (curChar == 40) + { + if (kind > 118) + kind = 118; + } + if ((0x3ff200000000000L & l) != 0L) + { + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + } + break; + case 171: + if ((0x3ff200000000000L & l) != 0L) + { + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + } + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 170; + break; + case 523: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(4, 8); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(327, 330); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(324, 326); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(322, 323); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(319, 321); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(314, 318); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(310, 313); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(306, 309); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(303, 305); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(299, 302); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(295, 298); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(292, 294); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(289, 291); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(286, 288); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(283, 285); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(280, 282); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(277, 279); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(274, 276); + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(272, 273); + if ((0x3ff000000000000L & l) != 0L) + { + if (kind > 73) + kind = 73; + jjCheckNAdd(271); + } + break; + case 525: + case 109: + if ((0x3ff200000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 216: + if (curChar == 42) + jjstateSet[jjnewStateCnt++] = 221; + else if (curChar == 47) + { + if (kind > 2) + kind = 2; + jjCheckNAddStates(9, 11); + } + break; + case 173: + if ((0x3ff200000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 24: + if ((0x3ff000000000000L & l) != 0L) + { + if (kind > 73) + kind = 73; + jjCheckNAddStates(12, 93); + } + else if ((0x100003600L & l) != 0L) + { + if (kind > 1) + kind = 1; + jjCheckNAdd(0); + } + else if (curChar == 46) + jjCheckNAddStates(94, 113); + else if (curChar == 45) + jjAddStates(114, 115); + else if (curChar == 33) + jjCheckNAddStates(116, 119); + else if (curChar == 47) + jjAddStates(120, 121); + else if (curChar == 35) + jjCheckNAddTwoStates(96, 97); + else if (curChar == 36) + jjCheckNAddStates(122, 125); + else if (curChar == 39) + jjCheckNAddStates(126, 129); + else if (curChar == 34) + jjCheckNAddStates(130, 133); + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 38; + else if (curChar == 35) + jjstateSet[jjnewStateCnt++] = 1; + break; + case 172: + if ((0x3ff200000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 170: + if ((0x3ff200000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 75: + if (curChar == 45) + jjCheckNAdd(76); + break; + case 522: + if ((0x3ff200000000000L & l) != 0L) + jjCheckNAddStates(0, 3); + else if ((0x100003600L & l) != 0L) + jjCheckNAddTwoStates(236, 237); + else if (curChar == 40) + { + if (kind > 118) + kind = 118; + } + if ((0x3ff200000000000L & l) != 0L) + { + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + } + break; + case 0: + if ((0x100003600L & l) == 0L) + break; + if (kind > 1) + kind = 1; + jjCheckNAdd(0); + break; + case 2: + if (curChar == 36) + jjCheckNAddStates(134, 137); + break; + case 3: + if (curChar == 45) + jjCheckNAdd(4); + break; + case 5: + if ((0x3ff200000000000L & l) != 0L) + jjCheckNAddStates(138, 140); + break; + case 8: + if ((0xffffffff00000000L & l) != 0L) + jjCheckNAddStates(138, 140); + break; + case 9: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(141, 145); + break; + case 10: + if ((0x100003600L & l) != 0L) + jjCheckNAddStates(138, 140); + break; + case 11: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(146, 153); + break; + case 12: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(154, 157); + break; + case 13: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(158, 162); + break; + case 14: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(163, 168); + break; + case 15: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(169, 175); + break; + case 18: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(176, 180); + break; + case 19: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(181, 188); + break; + case 20: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(189, 192); + break; + case 21: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(193, 197); + break; + case 22: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(198, 203); + break; + case 23: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(204, 210); + break; + case 36: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 35; + break; + case 39: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 38; + break; + case 40: + if (curChar == 34) + jjCheckNAddStates(130, 133); + break; + case 41: + if ((0xfffffffb00000200L & l) != 0L) + jjCheckNAddStates(130, 133); + break; + case 42: + if (curChar == 34 && kind > 71) + kind = 71; + break; + case 44: + if (curChar == 12) + jjCheckNAddStates(130, 133); + break; + case 46: + if ((0xffffffff00000000L & l) != 0L) + jjCheckNAddStates(130, 133); + break; + case 47: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(211, 216); + break; + case 48: + if ((0x100003600L & l) != 0L) + jjCheckNAddStates(130, 133); + break; + case 49: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(217, 225); + break; + case 50: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(226, 230); + break; + case 51: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(231, 236); + break; + case 52: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(237, 243); + break; + case 53: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(244, 251); + break; + case 54: + if (curChar == 13) + jjCheckNAddStates(130, 133); + break; + case 55: + if (curChar == 10) + jjCheckNAddStates(130, 133); + break; + case 56: + if (curChar == 13) + jjstateSet[jjnewStateCnt++] = 55; + break; + case 57: + if (curChar == 39) + jjCheckNAddStates(126, 129); + break; + case 58: + if ((0xffffff7f00000200L & l) != 0L) + jjCheckNAddStates(126, 129); + break; + case 59: + if (curChar == 39 && kind > 71) + kind = 71; + break; + case 61: + if (curChar == 12) + jjCheckNAddStates(126, 129); + break; + case 63: + if ((0xffffffff00000000L & l) != 0L) + jjCheckNAddStates(126, 129); + break; + case 64: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(252, 257); + break; + case 65: + if ((0x100003600L & l) != 0L) + jjCheckNAddStates(126, 129); + break; + case 66: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(258, 266); + break; + case 67: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(267, 271); + break; + case 68: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(272, 277); + break; + case 69: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(278, 284); + break; + case 70: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(285, 292); + break; + case 71: + if (curChar == 13) + jjCheckNAddStates(126, 129); + break; + case 72: + if (curChar == 10) + jjCheckNAddStates(126, 129); + break; + case 73: + if (curChar == 13) + jjstateSet[jjnewStateCnt++] = 72; + break; + case 74: + if (curChar == 36) + jjCheckNAddStates(122, 125); + break; + case 77: + if ((0x3ff200000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddTwoStates(77, 78); + break; + case 79: + if ((0xffffffff00000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddTwoStates(77, 78); + break; + case 80: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(293, 296); + break; + case 81: + if ((0x100003600L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddTwoStates(77, 78); + break; + case 82: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(297, 303); + break; + case 83: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(304, 306); + break; + case 84: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(307, 310); + break; + case 85: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(311, 315); + break; + case 86: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(316, 321); + break; + case 89: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(322, 325); + break; + case 90: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(326, 332); + break; + case 91: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(333, 335); + break; + case 92: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(336, 339); + break; + case 93: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(340, 344); + break; + case 94: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(345, 350); + break; + case 95: + if (curChar == 35) + jjCheckNAddTwoStates(96, 97); + break; + case 96: + if ((0x3ff200000000000L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddTwoStates(96, 97); + break; + case 98: + if ((0xffffffff00000000L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddTwoStates(96, 97); + break; + case 99: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(351, 354); + break; + case 100: + if ((0x100003600L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddTwoStates(96, 97); + break; + case 101: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(355, 361); + break; + case 102: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(362, 364); + break; + case 103: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(365, 368); + break; + case 104: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(369, 373); + break; + case 105: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(374, 379); + break; + case 107: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 108; + break; + case 111: + if ((0xffffffff00000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 112: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(380, 383); + break; + case 113: + if ((0x100003600L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 114: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(384, 390); + break; + case 115: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(391, 393); + break; + case 116: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(394, 397); + break; + case 117: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(398, 402); + break; + case 118: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(403, 408); + break; + case 121: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(409, 412); + break; + case 122: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(413, 419); + break; + case 123: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(420, 422); + break; + case 124: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(423, 426); + break; + case 125: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(427, 431); + break; + case 126: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(432, 437); + break; + case 128: + if ((0x100003600L & l) != 0L) + jjAddStates(438, 439); + break; + case 129: + if (curChar == 40 && kind > 115) + kind = 115; + break; + case 136: + if ((0x100003600L & l) != 0L) + jjAddStates(440, 441); + break; + case 137: + if (curChar == 40 && kind > 116) + kind = 116; + break; + case 144: + if ((0x100003600L & l) != 0L) + jjAddStates(442, 443); + break; + case 145: + if (curChar == 40 && kind > 117) + kind = 117; + break; + case 175: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 174; + break; + case 184: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 183; + break; + case 186: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 185; + break; + case 195: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 194; + break; + case 202: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 201; + break; + case 211: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 210; + break; + case 214: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 213; + break; + case 215: + if (curChar == 47) + jjAddStates(120, 121); + break; + case 217: + if ((0xffffffffffffdbffL & l) == 0L) + break; + if (kind > 2) + kind = 2; + jjCheckNAddStates(9, 11); + break; + case 218: + if ((0x2400L & l) != 0L && kind > 2) + kind = 2; + break; + case 219: + if (curChar == 10 && kind > 2) + kind = 2; + break; + case 220: + if (curChar == 13) + jjstateSet[jjnewStateCnt++] = 219; + break; + case 221: + if (curChar == 42) + jjstateSet[jjnewStateCnt++] = 222; + break; + case 222: + if ((0xffff7fffffffffffL & l) != 0L && kind > 3) + kind = 3; + break; + case 223: + if (curChar == 42) + jjstateSet[jjnewStateCnt++] = 221; + break; + case 225: + if ((0x3ff200000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + break; + case 227: + if ((0xffffffff00000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + break; + case 228: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(444, 447); + break; + case 229: + if ((0x100003600L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + break; + case 230: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(448, 454); + break; + case 231: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(455, 457); + break; + case 232: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(458, 461); + break; + case 233: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(462, 466); + break; + case 234: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(467, 472); + break; + case 235: + if ((0x3ff200000000000L & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 236: + if ((0x100003600L & l) != 0L) + jjCheckNAddTwoStates(236, 237); + break; + case 237: + if (curChar == 40 && kind > 118) + kind = 118; + break; + case 239: + if ((0xffffffff00000000L & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 240: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(473, 477); + break; + case 241: + if ((0x100003600L & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 242: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(478, 485); + break; + case 243: + case 457: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(486, 489); + break; + case 244: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(490, 494); + break; + case 245: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(495, 500); + break; + case 246: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(501, 507); + break; + case 247: + if (curChar == 33) + jjCheckNAddStates(116, 119); + break; + case 248: + if ((0x100003600L & l) != 0L) + jjCheckNAddTwoStates(248, 255); + break; + case 256: + if ((0x100003600L & l) != 0L) + jjCheckNAddTwoStates(256, 265); + break; + case 266: + if (curChar == 45) + jjAddStates(114, 115); + break; + case 270: + if (curChar == 46) + jjCheckNAddStates(94, 113); + break; + case 271: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 73) + kind = 73; + jjCheckNAdd(271); + break; + case 272: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(272, 273); + break; + case 273: + if (curChar == 37 && kind > 77) + kind = 77; + break; + case 274: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(274, 276); + break; + case 277: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(277, 279); + break; + case 280: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(280, 282); + break; + case 283: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(283, 285); + break; + case 286: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(286, 288); + break; + case 289: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(289, 291); + break; + case 292: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(292, 294); + break; + case 295: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(295, 298); + break; + case 299: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(299, 302); + break; + case 303: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(303, 305); + break; + case 306: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(306, 309); + break; + case 310: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(310, 313); + break; + case 314: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(314, 318); + break; + case 319: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(319, 321); + break; + case 322: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(322, 323); + break; + case 324: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(324, 326); + break; + case 327: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(327, 330); + break; + case 331: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(4, 8); + break; + case 332: + if (curChar == 45) + jjCheckNAdd(333); + break; + case 334: + if ((0x3ff200000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddTwoStates(334, 335); + break; + case 336: + if ((0xffffffff00000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddTwoStates(334, 335); + break; + case 337: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(508, 511); + break; + case 338: + if ((0x100003600L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddTwoStates(334, 335); + break; + case 339: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(512, 518); + break; + case 340: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(519, 521); + break; + case 341: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(522, 525); + break; + case 342: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(526, 530); + break; + case 343: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(531, 536); + break; + case 346: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(537, 540); + break; + case 347: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(541, 547); + break; + case 348: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(548, 550); + break; + case 349: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(551, 554); + break; + case 350: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(555, 559); + break; + case 351: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(560, 565); + break; + case 353: + if (curChar == 40) + jjCheckNAddStates(566, 571); + break; + case 354: + if ((0xfffffc7a00000000L & l) != 0L) + jjCheckNAddStates(572, 575); + break; + case 355: + if ((0x100003600L & l) != 0L) + jjCheckNAddTwoStates(355, 356); + break; + case 356: + if (curChar == 41 && kind > 75) + kind = 75; + break; + case 358: + if ((0xffffffff00000000L & l) != 0L) + jjCheckNAddStates(572, 575); + break; + case 359: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(576, 580); + break; + case 360: + if ((0x100003600L & l) != 0L) + jjCheckNAddStates(572, 575); + break; + case 361: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(581, 588); + break; + case 362: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(589, 592); + break; + case 363: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(593, 597); + break; + case 364: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(598, 603); + break; + case 365: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(604, 610); + break; + case 366: + if (curChar == 39) + jjCheckNAddStates(611, 614); + break; + case 367: + if ((0xffffff7f00000200L & l) != 0L) + jjCheckNAddStates(611, 614); + break; + case 368: + if (curChar == 39) + jjCheckNAddTwoStates(355, 356); + break; + case 370: + if (curChar == 12) + jjCheckNAddStates(611, 614); + break; + case 372: + if ((0xffffffff00000000L & l) != 0L) + jjCheckNAddStates(611, 614); + break; + case 373: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(615, 620); + break; + case 374: + if ((0x100003600L & l) != 0L) + jjCheckNAddStates(611, 614); + break; + case 375: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(621, 629); + break; + case 376: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(630, 634); + break; + case 377: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(635, 640); + break; + case 378: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(641, 647); + break; + case 379: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(648, 655); + break; + case 380: + if (curChar == 13) + jjCheckNAddStates(611, 614); + break; + case 381: + if (curChar == 10) + jjCheckNAddStates(611, 614); + break; + case 382: + if (curChar == 13) + jjstateSet[jjnewStateCnt++] = 381; + break; + case 383: + if (curChar == 34) + jjCheckNAddStates(656, 659); + break; + case 384: + if ((0xfffffffb00000200L & l) != 0L) + jjCheckNAddStates(656, 659); + break; + case 385: + if (curChar == 34) + jjCheckNAddTwoStates(355, 356); + break; + case 387: + if (curChar == 12) + jjCheckNAddStates(656, 659); + break; + case 389: + if ((0xffffffff00000000L & l) != 0L) + jjCheckNAddStates(656, 659); + break; + case 390: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(660, 665); + break; + case 391: + if ((0x100003600L & l) != 0L) + jjCheckNAddStates(656, 659); + break; + case 392: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(666, 674); + break; + case 393: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(675, 679); + break; + case 394: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(680, 685); + break; + case 395: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(686, 692); + break; + case 396: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(693, 700); + break; + case 397: + if (curChar == 13) + jjCheckNAddStates(656, 659); + break; + case 398: + if (curChar == 10) + jjCheckNAddStates(656, 659); + break; + case 399: + if (curChar == 13) + jjstateSet[jjnewStateCnt++] = 398; + break; + case 400: + if ((0x100003600L & l) != 0L) + jjCheckNAddStates(701, 707); + break; + case 403: + if (curChar == 43) + jjAddStates(708, 709); + break; + case 404: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 405; + break; + case 405: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(710, 713); + break; + case 406: + if (curChar == 63 && kind > 114) + kind = 114; + break; + case 407: + case 422: + case 426: + case 429: + case 432: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAdd(406); + break; + case 408: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddTwoStates(406, 407); + break; + case 409: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(714, 716); + break; + case 410: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjAddStates(717, 722); + break; + case 411: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 412; + break; + case 412: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 413; + break; + case 413: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAdd(414); + break; + case 414: + if ((0x3ff000000000000L & l) != 0L && kind > 114) + kind = 114; + break; + case 415: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 416; + break; + case 416: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 417; + break; + case 417: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 418; + break; + case 418: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAdd(406); + break; + case 419: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 420; + break; + case 420: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 421; + break; + case 421: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 422; + break; + case 423: + if ((0x3ff000000000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 424; + break; + case 424: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 425; + break; + case 425: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddTwoStates(406, 426); + break; + case 427: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 428; + break; + case 428: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(723, 725); + break; + case 430: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddTwoStates(406, 429); + break; + case 431: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(726, 729); + break; + case 433: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddTwoStates(406, 432); + break; + case 434: + if (curChar != 63) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(730, 732); + break; + case 435: + if (curChar == 43) + jjstateSet[jjnewStateCnt++] = 436; + break; + case 436: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(437, 443); + break; + case 437: + if (curChar == 45) + jjstateSet[jjnewStateCnt++] = 438; + break; + case 438: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 439; + break; + case 439: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(733, 736); + break; + case 440: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAdd(414); + break; + case 441: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAddTwoStates(414, 440); + break; + case 442: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(737, 739); + break; + case 443: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(740, 744); + break; + case 444: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAdd(437); + break; + case 445: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(444, 437); + break; + case 446: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(745, 747); + break; + case 447: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(748, 751); + break; + case 449: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(752, 755); + break; + case 450: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(756, 762); + break; + case 451: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(763, 765); + break; + case 452: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(766, 769); + break; + case 453: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(770, 774); + break; + case 454: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(775, 780); + break; + case 455: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(781, 785); + break; + case 456: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(786, 793); + break; + case 458: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(794, 798); + break; + case 459: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(799, 804); + break; + case 460: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(805, 811); + break; + case 461: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 73) + kind = 73; + jjCheckNAddStates(12, 93); + break; + case 462: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 73) + kind = 73; + jjCheckNAdd(462); + break; + case 463: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(463, 464); + break; + case 464: + if (curChar == 46) + jjCheckNAdd(271); + break; + case 465: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(465, 273); + break; + case 466: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(466, 467); + break; + case 467: + if (curChar == 46) + jjCheckNAdd(272); + break; + case 468: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(468, 276); + break; + case 469: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(469, 470); + break; + case 470: + if (curChar == 46) + jjCheckNAdd(274); + break; + case 471: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(471, 279); + break; + case 472: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(472, 473); + break; + case 473: + if (curChar == 46) + jjCheckNAdd(277); + break; + case 474: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(474, 282); + break; + case 475: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(475, 476); + break; + case 476: + if (curChar == 46) + jjCheckNAdd(280); + break; + case 477: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(477, 285); + break; + case 478: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(478, 479); + break; + case 479: + if (curChar == 46) + jjCheckNAdd(283); + break; + case 480: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(480, 288); + break; + case 481: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(481, 482); + break; + case 482: + if (curChar == 46) + jjCheckNAdd(286); + break; + case 483: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(483, 291); + break; + case 484: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(484, 485); + break; + case 485: + if (curChar == 46) + jjCheckNAdd(289); + break; + case 486: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(486, 294); + break; + case 487: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(487, 488); + break; + case 488: + if (curChar == 46) + jjCheckNAdd(292); + break; + case 489: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(489, 298); + break; + case 490: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(490, 491); + break; + case 491: + if (curChar == 46) + jjCheckNAdd(295); + break; + case 492: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(492, 302); + break; + case 493: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(493, 494); + break; + case 494: + if (curChar == 46) + jjCheckNAdd(299); + break; + case 495: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(495, 305); + break; + case 496: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(496, 497); + break; + case 497: + if (curChar == 46) + jjCheckNAdd(303); + break; + case 498: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(498, 309); + break; + case 499: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(499, 500); + break; + case 500: + if (curChar == 46) + jjCheckNAdd(306); + break; + case 501: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(501, 313); + break; + case 502: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(502, 503); + break; + case 503: + if (curChar == 46) + jjCheckNAdd(310); + break; + case 504: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(504, 318); + break; + case 505: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(505, 506); + break; + case 506: + if (curChar == 46) + jjCheckNAdd(314); + break; + case 507: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(507, 321); + break; + case 508: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(508, 509); + break; + case 509: + if (curChar == 46) + jjCheckNAdd(319); + break; + case 510: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(510, 323); + break; + case 511: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(511, 512); + break; + case 512: + if (curChar == 46) + jjCheckNAdd(322); + break; + case 513: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(513, 326); + break; + case 514: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(514, 515); + break; + case 515: + if (curChar == 46) + jjCheckNAdd(324); + break; + case 516: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(516, 330); + break; + case 517: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(517, 518); + break; + case 518: + if (curChar == 46) + jjCheckNAdd(327); + break; + case 519: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddStates(812, 816); + break; + case 520: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(520, 521); + break; + case 521: + if (curChar == 46) + jjCheckNAdd(331); + break; + default : break; + } + } while(i != startsAt); + } + else if (curChar < 128) + { + long l = 1L << (curChar & 077); + do + { + switch(jjstateSet[--i]) + { + case 524: + if ((0x20000000200L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 264; + else if ((0x1000000010L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 254; + break; + case 162: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + } + else if (curChar == 92) + jjCheckNAddTwoStates(111, 121); + if ((0x80000000800L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 161; + break; + case 29: + if ((0x7fffffe87fffffeL & l) != 0L) + jjCheckNAddStates(0, 3); + else if (curChar == 92) + jjCheckNAddTwoStates(227, 228); + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + } + else if (curChar == 92) + jjCheckNAddTwoStates(239, 240); + if ((0x20000000200L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 28; + break; + case 171: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + } + else if (curChar == 92) + jjCheckNAddTwoStates(111, 112); + break; + case 525: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + } + else if (curChar == 92) + jjCheckNAddTwoStates(111, 112); + break; + case 38: + if ((0x7fffffe87fffffeL & l) != 0L) + jjCheckNAddStates(0, 3); + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + } + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 37; + break; + case 173: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + } + else if (curChar == 92) + jjCheckNAddTwoStates(111, 112); + if ((0x8000000080000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 211; + else if ((0x800000008000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 172; + break; + case 24: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 72) + kind = 72; + jjCheckNAddStates(817, 822); + } + else if (curChar == 92) + jjCheckNAddStates(823, 826); + else if (curChar == 64) + jjAddStates(827, 831); + if ((0x20000000200000L & l) != 0L) + jjAddStates(832, 834); + else if ((0x800000008L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 151; + else if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 141; + else if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 133; + else if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 29; + else if (curChar == 64) + jjAddStates(835, 838); + break; + case 172: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + } + else if (curChar == 92) + jjCheckNAddTwoStates(111, 112); + if ((0x400000004000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 171; + break; + case 170: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + } + else if (curChar == 92) + jjCheckNAddTwoStates(111, 112); + if ((0x80000000800L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 169; + break; + case 174: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + } + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 212; + else if ((0x80000000800000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 200; + else if ((0x800000008000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 184; + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 173; + break; + case 75: + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 76) + kind = 76; + jjCheckNAddTwoStates(77, 78); + } + else if (curChar == 92) + jjCheckNAddTwoStates(79, 89); + break; + case 522: + if ((0x7fffffe87fffffeL & l) != 0L) + jjCheckNAddStates(0, 3); + else if (curChar == 92) + jjCheckNAddTwoStates(227, 228); + if ((0x7fffffe87fffffeL & l) != 0L) + { + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + } + else if (curChar == 92) + jjCheckNAddTwoStates(239, 240); + break; + case 1: + if (curChar == 123) + jjstateSet[jjnewStateCnt++] = 2; + break; + case 4: + case 5: + if ((0x7fffffe87fffffeL & l) != 0L) + jjCheckNAddStates(138, 140); + break; + case 6: + if (curChar == 125 && kind > 39) + kind = 39; + break; + case 7: + if (curChar == 92) + jjCheckNAddTwoStates(8, 9); + break; + case 8: + if ((0x7fffffffffffffffL & l) != 0L) + jjCheckNAddStates(138, 140); + break; + case 9: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(141, 145); + break; + case 11: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(146, 153); + break; + case 12: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(154, 157); + break; + case 13: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(158, 162); + break; + case 14: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(163, 168); + break; + case 15: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(169, 175); + break; + case 17: + if (curChar == 92) + jjCheckNAddTwoStates(8, 18); + break; + case 18: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(176, 180); + break; + case 19: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(181, 188); + break; + case 20: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(189, 192); + break; + case 21: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(193, 197); + break; + case 22: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(198, 203); + break; + case 23: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(204, 210); + break; + case 25: + if ((0x4000000040000L & l) != 0L && kind > 68) + kind = 68; + break; + case 26: + case 31: + if ((0x2000000020L & l) != 0L) + jjCheckNAdd(25); + break; + case 27: + if ((0x10000000100000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 26; + break; + case 28: + if ((0x100000001000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 27; + break; + case 30: + if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 29; + break; + case 32: + if ((0x10000000100000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 31; + break; + case 33: + if ((0x100000001000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 32; + break; + case 34: + if ((0x20000000200L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 33; + break; + case 35: + if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 34; + break; + case 37: + if ((0x8000000080000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 36; + break; + case 41: + case 46: + if ((0x7fffffffffffffffL & l) != 0L) + jjCheckNAddStates(130, 133); + break; + case 43: + if (curChar == 92) + jjAddStates(839, 842); + break; + case 45: + if (curChar == 92) + jjAddStates(843, 844); + break; + case 47: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(211, 216); + break; + case 49: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(217, 225); + break; + case 50: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(226, 230); + break; + case 51: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(231, 236); + break; + case 52: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(237, 243); + break; + case 53: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(244, 251); + break; + case 58: + case 63: + if ((0x7fffffffffffffffL & l) != 0L) + jjCheckNAddStates(126, 129); + break; + case 60: + if (curChar == 92) + jjAddStates(845, 848); + break; + case 62: + if (curChar == 92) + jjAddStates(849, 850); + break; + case 64: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(252, 257); + break; + case 66: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(258, 266); + break; + case 67: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(267, 271); + break; + case 68: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(272, 277); + break; + case 69: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(278, 284); + break; + case 70: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(285, 292); + break; + case 76: + case 77: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddTwoStates(77, 78); + break; + case 78: + if (curChar == 92) + jjCheckNAddTwoStates(79, 80); + break; + case 79: + if ((0x7fffffffffffffffL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddTwoStates(77, 78); + break; + case 80: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(293, 296); + break; + case 82: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(297, 303); + break; + case 83: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(304, 306); + break; + case 84: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(307, 310); + break; + case 85: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(311, 315); + break; + case 86: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(316, 321); + break; + case 88: + if (curChar == 92) + jjCheckNAddTwoStates(79, 89); + break; + case 89: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(322, 325); + break; + case 90: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(326, 332); + break; + case 91: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(333, 335); + break; + case 92: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(336, 339); + break; + case 93: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(340, 344); + break; + case 94: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddStates(345, 350); + break; + case 96: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddTwoStates(96, 97); + break; + case 97: + if (curChar == 92) + jjAddStates(851, 852); + break; + case 98: + if ((0x7fffffffffffffffL & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddTwoStates(96, 97); + break; + case 99: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(351, 354); + break; + case 101: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(355, 361); + break; + case 102: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(362, 364); + break; + case 103: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(365, 368); + break; + case 104: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(369, 373); + break; + case 105: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddStates(374, 379); + break; + case 106: + if (curChar == 64) + jjAddStates(835, 838); + break; + case 108: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 109: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 110: + if (curChar == 92) + jjCheckNAddTwoStates(111, 112); + break; + case 111: + if ((0x7fffffffffffffffL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 112: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(380, 383); + break; + case 114: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(384, 390); + break; + case 115: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(391, 393); + break; + case 116: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(394, 397); + break; + case 117: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(398, 402); + break; + case 118: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(403, 408); + break; + case 120: + if (curChar == 92) + jjCheckNAddTwoStates(111, 121); + break; + case 121: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(409, 412); + break; + case 122: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(413, 419); + break; + case 123: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(420, 422); + break; + case 124: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(423, 426); + break; + case 125: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(427, 431); + break; + case 126: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddStates(432, 437); + break; + case 127: + if ((0x2000000020L & l) != 0L) + jjAddStates(438, 439); + break; + case 130: + if ((0x40000000400000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 127; + break; + case 131: + if ((0x800000008000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 130; + break; + case 132: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 131; + break; + case 133: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 132; + break; + case 134: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 133; + break; + case 135: + if ((0x1000000010L & l) != 0L) + jjAddStates(440, 441); + break; + case 138: + if ((0x400000004000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 135; + break; + case 139: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 138; + break; + case 140: + if ((0x1000000010000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 139; + break; + case 141: + if ((0x1000000010000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 140; + break; + case 142: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 141; + break; + case 143: + if ((0x8000000080000L & l) != 0L) + jjAddStates(442, 443); + break; + case 146: + if ((0x400000004000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 143; + break; + case 147: + if ((0x20000000200L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 146; + break; + case 148: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 147; + break; + case 149: + if ((0x10000000100000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 148; + break; + case 150: + if ((0x400000004000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 149; + break; + case 151: + if ((0x800000008000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 150; + break; + case 152: + if ((0x800000008L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 151; + break; + case 153: + if (curChar == 64) + jjAddStates(827, 831); + break; + case 154: + if ((0x8000000080000L & l) != 0L && kind > 102) + kind = 102; + break; + case 155: + case 163: + case 176: + case 187: + case 203: + if ((0x2000000020L & l) != 0L) + jjCheckNAdd(154); + break; + case 156: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 155; + break; + case 157: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 156; + break; + case 158: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 157; + break; + case 159: + if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 158; + break; + case 160: + if ((0x200000002000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 159; + break; + case 161: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 160; + break; + case 164: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 163; + break; + case 165: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 164; + break; + case 166: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 165; + break; + case 167: + if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 166; + break; + case 168: + if ((0x200000002000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 167; + break; + case 169: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 168; + break; + case 177: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 176; + break; + case 178: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 177; + break; + case 179: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 178; + break; + case 180: + if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 179; + break; + case 181: + if ((0x200000002000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 180; + break; + case 182: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 181; + break; + case 183: + if ((0x80000000800L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 182; + break; + case 185: + if ((0x800000008000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 184; + break; + case 188: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 187; + break; + case 189: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 188; + break; + case 190: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 189; + break; + case 191: + if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 190; + break; + case 192: + if ((0x200000002000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 191; + break; + case 193: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 192; + break; + case 194: + if ((0x80000000800L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 193; + break; + case 196: + if ((0x10000000100000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 195; + break; + case 197: + if ((0x20000000200L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 196; + break; + case 198: + if ((0x80000000800L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 197; + break; + case 199: + if ((0x400000004L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 198; + break; + case 200: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 199; + break; + case 201: + if ((0x80000000800000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 200; + break; + case 204: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 203; + break; + case 205: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 204; + break; + case 206: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 205; + break; + case 207: + if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 206; + break; + case 208: + if ((0x200000002000000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 207; + break; + case 209: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 208; + break; + case 210: + if ((0x80000000800L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 209; + break; + case 212: + if ((0x8000000080000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 211; + break; + case 213: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 212; + break; + case 217: + if (kind > 2) + kind = 2; + jjAddStates(9, 11); + break; + case 222: + if (kind > 3) + kind = 3; + break; + case 225: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + break; + case 226: + if (curChar == 92) + jjCheckNAddTwoStates(227, 228); + break; + case 227: + if ((0x7fffffffffffffffL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + break; + case 228: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(444, 447); + break; + case 230: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(448, 454); + break; + case 231: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(455, 457); + break; + case 232: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(458, 461); + break; + case 233: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(462, 466); + break; + case 234: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(467, 472); + break; + case 235: + if ((0x7fffffe87fffffeL & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 238: + if (curChar == 92) + jjCheckNAddTwoStates(239, 240); + break; + case 239: + if ((0x7fffffffffffffffL & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 240: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(473, 477); + break; + case 242: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(478, 485); + break; + case 243: + case 457: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(486, 489); + break; + case 244: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(490, 494); + break; + case 245: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(495, 500); + break; + case 246: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(501, 507); + break; + case 249: + if ((0x10000000100000L & l) != 0L && kind > 70) + kind = 70; + break; + case 250: + if ((0x100000001000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 249; + break; + case 251: + if ((0x20000000200000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 250; + break; + case 252: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 251; + break; + case 253: + if ((0x4000000040L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 252; + break; + case 254: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 253; + break; + case 255: + if ((0x1000000010L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 254; + break; + case 257: + if ((0x10000000100000L & l) != 0L && kind > 104) + kind = 104; + break; + case 258: + if ((0x400000004000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 257; + break; + case 259: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 258; + break; + case 260: + if ((0x10000000100000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 259; + break; + case 261: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 260; + break; + case 262: + if ((0x800000008000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 261; + break; + case 263: + if ((0x1000000010000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 262; + break; + case 264: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 263; + break; + case 265: + if ((0x20000000200L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 264; + break; + case 267: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + break; + case 268: + if ((0x7fffffe87fffffeL & l) != 0L) + jjCheckNAddStates(0, 3); + break; + case 269: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(817, 822); + break; + case 275: + if ((0x10000000100000L & l) != 0L && kind > 78) + kind = 78; + break; + case 276: + if ((0x1000000010000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 275; + break; + case 278: + if ((0x200000002000L & l) != 0L && kind > 79) + kind = 79; + break; + case 279: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 278; + break; + case 281: + if ((0x200000002000L & l) != 0L && kind > 80) + kind = 80; + break; + case 282: + if ((0x800000008L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 281; + break; + case 284: + if ((0x800000008L & l) != 0L && kind > 81) + kind = 81; + break; + case 285: + if ((0x1000000010000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 284; + break; + case 287: + if ((0x400000004000L & l) != 0L && kind > 82) + kind = 82; + break; + case 288: + if ((0x20000000200L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 287; + break; + case 290: + if ((0x100000001000000L & l) != 0L && kind > 83) + kind = 83; + break; + case 291: + if ((0x1000000010000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 290; + break; + case 293: + if ((0x200000002000L & l) != 0L && kind > 84) + kind = 84; + break; + case 294: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 293; + break; + case 296: + if ((0x200000002000L & l) != 0L && kind > 85) + kind = 85; + break; + case 297: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 296; + break; + case 298: + if ((0x100000001000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 297; + break; + case 300: + if ((0x200000002000L & l) != 0L && kind > 86) + kind = 86; + break; + case 301: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 300; + break; + case 302: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 301; + break; + case 304: + if ((0x100000001000000L & l) != 0L && kind > 87) + kind = 87; + break; + case 305: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 304; + break; + case 307: + if ((0x8000000080L & l) != 0L && kind > 88) + kind = 88; + break; + case 308: + if ((0x2000000020L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 307; + break; + case 309: + if ((0x1000000010L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 308; + break; + case 311: + if ((0x1000000010L & l) != 0L && kind > 89) + kind = 89; + break; + case 312: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 311; + break; + case 313: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 312; + break; + case 315: + if ((0x1000000010L & l) != 0L && kind > 90) + kind = 90; + break; + case 316: + if ((0x200000002L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 315; + break; + case 317: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 316; + break; + case 318: + if ((0x8000000080L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 317; + break; + case 320: + if ((0x8000000080000L & l) != 0L && kind > 91) + kind = 91; + break; + case 321: + if ((0x200000002000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 320; + break; + case 323: + if ((0x8000000080000L & l) != 0L && kind > 92) + kind = 92; + break; + case 325: + if ((0x400000004000000L & l) != 0L && kind > 93) + kind = 93; + break; + case 326: + if ((0x10000000100L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 325; + break; + case 328: + if ((0x400000004000000L & l) != 0L && kind > 94) + kind = 94; + break; + case 329: + if ((0x10000000100L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 328; + break; + case 330: + if ((0x80000000800L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 329; + break; + case 333: + case 334: + if ((0x7fffffe87fffffeL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddTwoStates(334, 335); + break; + case 335: + if (curChar == 92) + jjCheckNAddTwoStates(336, 337); + break; + case 336: + if ((0x7fffffffffffffffL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddTwoStates(334, 335); + break; + case 337: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(508, 511); + break; + case 339: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(512, 518); + break; + case 340: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(519, 521); + break; + case 341: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(522, 525); + break; + case 342: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(526, 530); + break; + case 343: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(531, 536); + break; + case 345: + if (curChar == 92) + jjCheckNAddTwoStates(336, 346); + break; + case 346: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(537, 540); + break; + case 347: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(541, 547); + break; + case 348: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(548, 550); + break; + case 349: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(551, 554); + break; + case 350: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(555, 559); + break; + case 351: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddStates(560, 565); + break; + case 352: + if ((0x20000000200000L & l) != 0L) + jjAddStates(832, 834); + break; + case 354: + case 358: + if ((0x7fffffffffffffffL & l) != 0L) + jjCheckNAddStates(572, 575); + break; + case 357: + if (curChar == 92) + jjAddStates(853, 854); + break; + case 359: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(576, 580); + break; + case 361: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(581, 588); + break; + case 362: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(589, 592); + break; + case 363: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(593, 597); + break; + case 364: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(598, 603); + break; + case 365: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(604, 610); + break; + case 367: + case 372: + if ((0x7fffffffffffffffL & l) != 0L) + jjCheckNAddStates(611, 614); + break; + case 369: + if (curChar == 92) + jjAddStates(855, 858); + break; + case 371: + if (curChar == 92) + jjAddStates(859, 860); + break; + case 373: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(615, 620); + break; + case 375: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(621, 629); + break; + case 376: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(630, 634); + break; + case 377: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(635, 640); + break; + case 378: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(641, 647); + break; + case 379: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(648, 655); + break; + case 384: + case 389: + if ((0x7fffffffffffffffL & l) != 0L) + jjCheckNAddStates(656, 659); + break; + case 386: + if (curChar == 92) + jjAddStates(861, 864); + break; + case 388: + if (curChar == 92) + jjAddStates(865, 866); + break; + case 390: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(660, 665); + break; + case 392: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(666, 674); + break; + case 393: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(675, 679); + break; + case 394: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(680, 685); + break; + case 395: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(686, 692); + break; + case 396: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(693, 700); + break; + case 401: + if ((0x100000001000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 353; + break; + case 402: + if ((0x4000000040000L & l) != 0L) + jjstateSet[jjnewStateCnt++] = 401; + break; + case 410: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjAddStates(717, 722); + break; + case 411: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 412; + break; + case 412: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 413; + break; + case 413: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAdd(414); + break; + case 414: + if ((0x7e0000007eL & l) != 0L && kind > 114) + kind = 114; + break; + case 415: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 416; + break; + case 416: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 417; + break; + case 417: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 418; + break; + case 418: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 406; + break; + case 419: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 420; + break; + case 420: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 421; + break; + case 421: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 422; + break; + case 423: + if ((0x7e0000007eL & l) != 0L) + jjstateSet[jjnewStateCnt++] = 424; + break; + case 424: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 425; + break; + case 427: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 428; + break; + case 436: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddTwoStates(437, 443); + break; + case 438: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjstateSet[jjnewStateCnt++] = 439; + break; + case 439: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(733, 736); + break; + case 440: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAdd(414); + break; + case 441: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAddTwoStates(414, 440); + break; + case 442: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 114) + kind = 114; + jjCheckNAddStates(737, 739); + break; + case 443: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(740, 744); + break; + case 444: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAdd(437); + break; + case 445: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddTwoStates(444, 437); + break; + case 446: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(745, 747); + break; + case 447: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(748, 751); + break; + case 448: + if (curChar == 92) + jjCheckNAddStates(823, 826); + break; + case 449: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(752, 755); + break; + case 450: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(756, 762); + break; + case 451: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(763, 765); + break; + case 452: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(766, 769); + break; + case 453: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(770, 774); + break; + case 454: + if ((0x7e0000007eL & l) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddStates(775, 780); + break; + case 455: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(781, 785); + break; + case 456: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(786, 793); + break; + case 458: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(794, 798); + break; + case 459: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(799, 804); + break; + case 460: + if ((0x7e0000007eL & l) != 0L) + jjCheckNAddStates(805, 811); + break; + default : break; + } + } while(i != startsAt); + } + else + { + int i2 = (curChar & 0xff) >> 6; + long l2 = 1L << (curChar & 077); + do + { + switch(jjstateSet[--i]) + { + case 162: + case 111: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 29: + if ((jjbitVec0[i2] & l2) != 0L) + { + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + } + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(0, 3); + break; + case 171: + case 109: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 525: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 173: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 24: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 40) + kind = 40; + jjCheckNAddStates(817, 822); + break; + case 172: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 170: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 103) + kind = 103; + jjCheckNAddTwoStates(109, 110); + break; + case 75: + case 77: + case 79: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 76) + kind = 76; + jjCheckNAddTwoStates(77, 78); + break; + case 522: + if ((jjbitVec0[i2] & l2) != 0L) + { + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + } + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(0, 3); + break; + case 5: + case 8: + case 16: + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(138, 140); + break; + case 41: + case 46: + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(130, 133); + break; + case 58: + case 63: + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(126, 129); + break; + case 96: + case 98: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 96) + kind = 96; + jjCheckNAddTwoStates(96, 97); + break; + case 217: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 2) + kind = 2; + jjAddStates(9, 11); + break; + case 222: + if ((jjbitVec0[i2] & l2) != 0L && kind > 3) + kind = 3; + break; + case 225: + case 227: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 72) + kind = 72; + jjCheckNAddTwoStates(225, 226); + break; + case 235: + case 239: + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(0, 3); + break; + case 334: + case 336: + case 344: + if ((jjbitVec0[i2] & l2) == 0L) + break; + if (kind > 95) + kind = 95; + jjCheckNAddTwoStates(334, 335); + break; + case 354: + case 358: + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(572, 575); + break; + case 367: + case 372: + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(611, 614); + break; + case 384: + case 389: + if ((jjbitVec0[i2] & l2) != 0L) + jjCheckNAddStates(656, 659); + break; + default : break; + } + } while(i != startsAt); + } + if (kind != 0x7fffffff) + { + jjmatchedKind = kind; + jjmatchedPos = curPos; + kind = 0x7fffffff; + } + ++curPos; + if ((i = jjnewStateCnt) == (startsAt = 522 - (jjnewStateCnt = startsAt))) + return curPos; + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { return curPos; } + } +} +private int jjMoveStringLiteralDfa0_2() +{ + switch(curChar) + { + case 42: + return jjMoveStringLiteralDfa1_2(0x40L); + default : + return 1; + } +} +private int jjMoveStringLiteralDfa1_2(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + return 1; + } + switch(curChar) + { + case 47: + if ((active0 & 0x40L) != 0L) + return jjStopAtPos(1, 6); + break; + default : + return 2; + } + return 2; +} +private int jjMoveStringLiteralDfa0_1() +{ + switch(curChar) + { + case 42: + return jjMoveStringLiteralDfa1_1(0x20L); + default : + return 1; + } +} +private int jjMoveStringLiteralDfa1_1(long active0) +{ + try { curChar = input_stream.readChar(); } + catch(java.io.IOException e) { + return 1; + } + switch(curChar) + { + case 47: + if ((active0 & 0x20L) != 0L) + return jjStopAtPos(1, 5); + break; + default : + return 2; + } + return 2; +} +static final int[] jjnextStates = { + 235, 236, 237, 238, 331, 332, 333, 344, 345, 217, 218, 220, 462, 463, 464, 465, + 466, 467, 273, 468, 469, 470, 276, 471, 472, 473, 279, 474, 475, 476, 282, 477, + 478, 479, 285, 480, 481, 482, 288, 483, 484, 485, 291, 486, 487, 488, 294, 489, + 490, 491, 298, 492, 493, 494, 302, 495, 496, 497, 305, 498, 499, 500, 309, 501, + 502, 503, 313, 504, 505, 506, 318, 507, 508, 509, 321, 510, 511, 512, 323, 513, + 514, 515, 326, 516, 517, 518, 330, 519, 520, 521, 332, 333, 344, 345, 271, 272, + 274, 277, 280, 283, 286, 289, 292, 295, 299, 303, 306, 310, 314, 319, 322, 324, + 327, 331, 267, 268, 248, 255, 256, 265, 216, 223, 75, 76, 87, 88, 58, 59, + 60, 62, 41, 42, 43, 45, 3, 4, 16, 17, 5, 6, 7, 5, 10, 6, + 7, 11, 5, 12, 10, 6, 7, 13, 14, 15, 5, 10, 6, 7, 5, 12, + 10, 6, 7, 5, 12, 10, 6, 7, 13, 5, 12, 10, 6, 7, 13, 14, + 10, 5, 6, 7, 19, 20, 10, 5, 6, 7, 21, 22, 23, 10, 5, 6, + 7, 20, 10, 5, 6, 7, 20, 10, 5, 6, 7, 21, 20, 10, 5, 6, + 7, 21, 22, 41, 48, 42, 43, 45, 49, 41, 50, 48, 42, 43, 45, 51, + 52, 53, 41, 48, 42, 43, 45, 41, 50, 48, 42, 43, 45, 41, 50, 48, + 42, 43, 45, 51, 41, 50, 48, 42, 43, 45, 51, 52, 58, 65, 59, 60, + 62, 66, 58, 67, 65, 59, 60, 62, 68, 69, 70, 58, 65, 59, 60, 62, + 58, 67, 65, 59, 60, 62, 58, 67, 65, 59, 60, 62, 68, 58, 67, 65, + 59, 60, 62, 68, 69, 77, 81, 78, 82, 77, 83, 81, 78, 84, 85, 86, + 77, 81, 78, 77, 83, 81, 78, 77, 83, 81, 78, 84, 77, 83, 81, 78, + 84, 85, 81, 77, 78, 90, 91, 81, 77, 78, 92, 93, 94, 81, 77, 78, + 91, 81, 77, 78, 91, 81, 77, 78, 92, 91, 81, 77, 78, 92, 93, 96, + 100, 97, 101, 96, 102, 100, 97, 103, 104, 105, 96, 100, 97, 96, 102, 100, + 97, 96, 102, 100, 97, 103, 96, 102, 100, 97, 103, 104, 109, 113, 110, 114, + 109, 115, 113, 110, 116, 117, 118, 109, 113, 110, 109, 115, 113, 110, 109, 115, + 113, 110, 116, 109, 115, 113, 110, 116, 117, 113, 109, 110, 122, 123, 113, 109, + 110, 124, 125, 126, 113, 109, 110, 123, 113, 109, 110, 123, 113, 109, 110, 124, + 123, 113, 109, 110, 124, 125, 128, 129, 136, 137, 144, 145, 225, 229, 226, 230, + 225, 231, 229, 226, 232, 233, 234, 225, 229, 226, 225, 231, 229, 226, 225, 231, + 229, 226, 232, 225, 231, 229, 226, 232, 233, 235, 237, 238, 241, 242, 235, 243, + 237, 238, 241, 244, 245, 246, 235, 237, 238, 241, 235, 243, 237, 238, 241, 235, + 243, 237, 238, 241, 244, 235, 243, 237, 238, 241, 244, 245, 334, 338, 335, 339, + 334, 340, 338, 335, 341, 342, 343, 334, 338, 335, 334, 340, 338, 335, 334, 340, + 338, 335, 341, 334, 340, 338, 335, 341, 342, 338, 334, 335, 347, 348, 338, 334, + 335, 349, 350, 351, 338, 334, 335, 348, 338, 334, 335, 348, 338, 334, 335, 349, + 348, 338, 334, 335, 349, 350, 354, 366, 383, 356, 357, 400, 354, 355, 356, 357, + 354, 356, 357, 360, 361, 354, 362, 356, 357, 360, 363, 364, 365, 354, 356, 357, + 360, 354, 362, 356, 357, 360, 354, 362, 356, 357, 360, 363, 354, 362, 356, 357, + 360, 363, 364, 367, 368, 369, 371, 367, 374, 368, 369, 371, 375, 367, 376, 374, + 368, 369, 371, 377, 378, 379, 367, 374, 368, 369, 371, 367, 376, 374, 368, 369, + 371, 367, 376, 374, 368, 369, 371, 377, 367, 376, 374, 368, 369, 371, 377, 378, + 384, 385, 386, 388, 384, 391, 385, 386, 388, 392, 384, 393, 391, 385, 386, 388, + 394, 395, 396, 384, 391, 385, 386, 388, 384, 393, 391, 385, 386, 388, 384, 393, + 391, 385, 386, 388, 394, 384, 393, 391, 385, 386, 388, 394, 395, 354, 366, 383, + 355, 356, 357, 400, 404, 410, 406, 407, 408, 409, 406, 407, 408, 411, 415, 419, + 423, 427, 431, 406, 429, 430, 406, 432, 433, 434, 406, 432, 433, 414, 440, 441, + 442, 414, 440, 441, 444, 437, 445, 446, 447, 444, 437, 445, 444, 437, 445, 446, + 229, 225, 226, 450, 451, 229, 225, 226, 452, 453, 454, 229, 225, 226, 451, 229, + 225, 226, 451, 229, 225, 226, 452, 451, 229, 225, 226, 452, 453, 235, 237, 238, + 241, 456, 457, 235, 237, 238, 241, 458, 459, 460, 457, 235, 237, 238, 241, 457, + 235, 237, 238, 241, 458, 457, 235, 237, 238, 241, 458, 459, 519, 332, 333, 344, + 345, 225, 235, 236, 237, 238, 226, 227, 449, 239, 455, 162, 175, 186, 202, 214, + 402, 403, 435, 107, 108, 119, 120, 44, 54, 56, 55, 46, 47, 61, 71, 73, + 72, 63, 64, 98, 99, 358, 359, 370, 380, 382, 381, 372, 373, 387, 397, 399, + 398, 389, 390, +}; + +/** Token literal values. */ +public static final String[] jjstrLiteralImages = { +"", null, null, null, null, null, null, null, "\74\41\55\55", "\55\55\76", +"\173", "\175", "\174\75", "\136\75", "\44\75", "\52\75", "\176\75", "\75", "\53", +"\55", "\54", "\73", "\76", "\176", "\74", "\57", "\133", "\135", "\52", "\45", +"\46", "\56", "\50", "\51", "\75\75", "\174\174", "\46\46", "\41\75", "\72", null, +null, null, null, null, null, null, null, null, null, null, null, null, null, null, +null, null, null, null, null, null, null, null, null, null, null, null, null, null, +null, null, null, null, null, null, null, null, null, null, null, null, null, null, +null, null, null, null, null, null, null, null, null, null, null, null, null, null, +null, null, null, null, null, null, null, null, null, null, null, null, null, null, +null, null, null, null, null, null, null, null, null, null, }; + +/** Lexer state names. */ +public static final String[] lexStateNames = { + "DEFAULT", + "IN_FORMAL_COMMENT", + "IN_MULTI_LINE_COMMENT", +}; + +/** Lex State array. */ +public static final int[] jjnewLexState = { + -1, -1, -1, 1, 2, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, +}; +static final long[] jjtoToken = { + 0xfffe01ffffffff03L, 0xfc01fffffffbffL, +}; +static final long[] jjtoSkip = { + 0x64L, 0x0L, +}; +static final long[] jjtoSpecial = { + 0x24L, 0x0L, +}; +static final long[] jjtoMore = { + 0x98L, 0x0L, +}; +protected CharStream input_stream; +private final int[] jjrounds = new int[522]; +private final int[] jjstateSet = new int[1044]; +private final StringBuilder jjimage = new StringBuilder(); +private StringBuilder image = jjimage; +private int jjimageLen; +private int lengthOfMatch; +protected char curChar; +/** Constructor. */ +public ParserTokenManager(CharStream stream){ + input_stream = stream; +} + +/** Constructor. */ +public ParserTokenManager(CharStream stream, int lexState){ + this(stream); + SwitchTo(lexState); +} + +/** Reinitialise parser. */ +public void ReInit(CharStream stream) +{ + jjmatchedPos = jjnewStateCnt = 0; + curLexState = defaultLexState; + input_stream = stream; + ReInitRounds(); +} +private void ReInitRounds() +{ + int i; + jjround = 0x80000001; + for (i = 522; i-- > 0;) + jjrounds[i] = 0x80000000; +} + +/** Reinitialise parser. */ +public void ReInit(CharStream stream, int lexState) +{ + ReInit(stream); + SwitchTo(lexState); +} + +/** Switch to specified lex state. */ +public void SwitchTo(int lexState) +{ + if (lexState >= 3 || lexState < 0) + throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE); + else + curLexState = lexState; +} + +protected Token jjFillToken() +{ + final Token t; + final String curTokenImage; + final int beginLine; + final int endLine; + final int beginColumn; + final int endColumn; + String im = jjstrLiteralImages[jjmatchedKind]; + curTokenImage = (im == null) ? input_stream.GetImage() : im; + beginLine = input_stream.getBeginLine(); + beginColumn = input_stream.getBeginColumn(); + endLine = input_stream.getEndLine(); + endColumn = input_stream.getEndColumn(); + t = Token.newToken(jjmatchedKind, curTokenImage); + + t.beginLine = beginLine; + t.endLine = endLine; + t.beginColumn = beginColumn; + t.endColumn = endColumn; + + return t; +} + +int curLexState = 0; +int defaultLexState = 0; +int jjnewStateCnt; +int jjround; +int jjmatchedPos; +int jjmatchedKind; + +/** Get the next Token. */ +public Token getNextToken() +{ + Token specialToken = null; + Token matchedToken; + int curPos = 0; + + EOFLoop : + for (;;) + { + try + { + curChar = input_stream.BeginToken(); + } + catch(java.io.IOException e) + { + jjmatchedKind = 0; + matchedToken = jjFillToken(); + matchedToken.specialToken = specialToken; + return matchedToken; + } + image = jjimage; + image.setLength(0); + jjimageLen = 0; + + for (;;) + { + switch(curLexState) + { + case 0: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_0(); + if (jjmatchedPos == 0 && jjmatchedKind > 119) + { + jjmatchedKind = 119; + } + break; + case 1: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_1(); + if (jjmatchedPos == 0 && jjmatchedKind > 7) + { + jjmatchedKind = 7; + } + break; + case 2: + jjmatchedKind = 0x7fffffff; + jjmatchedPos = 0; + curPos = jjMoveStringLiteralDfa0_2(); + if (jjmatchedPos == 0 && jjmatchedKind > 7) + { + jjmatchedKind = 7; + } + break; + } + if (jjmatchedKind != 0x7fffffff) + { + if (jjmatchedPos + 1 < curPos) + input_stream.backup(curPos - jjmatchedPos - 1); + if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) + { + matchedToken = jjFillToken(); + matchedToken.specialToken = specialToken; + TokenLexicalActions(matchedToken); + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + return matchedToken; + } + else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) + { + if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) + { + matchedToken = jjFillToken(); + if (specialToken == null) + specialToken = matchedToken; + else + { + matchedToken.specialToken = specialToken; + specialToken = (specialToken.next = matchedToken); + } + SkipLexicalActions(matchedToken); + } + else + SkipLexicalActions(null); + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + continue EOFLoop; + } + MoreLexicalActions(); + if (jjnewLexState[jjmatchedKind] != -1) + curLexState = jjnewLexState[jjmatchedKind]; + curPos = 0; + jjmatchedKind = 0x7fffffff; + try { + curChar = input_stream.readChar(); + continue; + } + catch (java.io.IOException e1) { } + } + int error_line = input_stream.getEndLine(); + int error_column = input_stream.getEndColumn(); + String error_after = null; + boolean EOFSeen = false; + try { input_stream.readChar(); input_stream.backup(1); } + catch (java.io.IOException e1) { + EOFSeen = true; + error_after = curPos <= 1 ? "" : input_stream.GetImage(); + if (curChar == '\n' || curChar == '\r') { + error_line++; + error_column = 0; + } + else + error_column++; + } + if (!EOFSeen) { + input_stream.backup(1); + error_after = curPos <= 1 ? "" : input_stream.GetImage(); + } + throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR); + } + } +} + +void SkipLexicalActions(Token matchedToken) +{ + switch(jjmatchedKind) + { + default : + break; + } +} +void MoreLexicalActions() +{ + jjimageLen += (lengthOfMatch = jjmatchedPos + 1); + switch(jjmatchedKind) + { + case 3 : + image.append(input_stream.GetSuffix(jjimageLen)); + jjimageLen = 0; + input_stream.backup(1); + break; + default : + break; + } +} +void TokenLexicalActions(Token matchedToken) +{ + switch(jjmatchedKind) + { + case 1 : + image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1))); + image = Parser.SPACE; + break; + default : + break; + } +} +private void jjCheckNAdd(int state) +{ + if (jjrounds[state] != jjround) + { + jjstateSet[jjnewStateCnt++] = state; + jjrounds[state] = jjround; + } +} +private void jjAddStates(int start, int end) +{ + do { + jjstateSet[jjnewStateCnt++] = jjnextStates[start]; + } while (start++ != end); +} +private void jjCheckNAddTwoStates(int state1, int state2) +{ + jjCheckNAdd(state1); + jjCheckNAdd(state2); +} + +private void jjCheckNAddStates(int start, int end) +{ + do { + jjCheckNAdd(jjnextStates[start]); + } while (start++ != end); +} + +} diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/Token.java b/theme-compiler/src/com/vaadin/sass/internal/parser/Token.java new file mode 100644 index 0000000000..26d1121f96 --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Token.java @@ -0,0 +1,146 @@ +/* + * 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. Token.java Version 5.0 */ +/* JavaCCOptions:TOKEN_EXTENDS=,KEEP_LINE_COL=null,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ +package com.vaadin.sass.internal.parser; + +/** + * Describes the input token stream. + */ + +public class Token implements java.io.Serializable { + + /** + * The version identifier for this Serializable class. + * Increment only if the serialized form of the + * class changes. + */ + private static final long serialVersionUID = 1L; + + /** + * An integer that describes the kind of this token. This numbering + * system is determined by JavaCCParser, and a table of these numbers is + * stored in the file ...Constants.java. + */ + public int kind; + + /** The line number of the first character of this Token. */ + public int beginLine; + /** The column number of the first character of this Token. */ + public int beginColumn; + /** The line number of the last character of this Token. */ + public int endLine; + /** The column number of the last character of this Token. */ + public int endColumn; + + /** + * The string image of the token. + */ + public String image; + + /** + * A reference to the next regular (non-special) token from the input + * stream. If this is the last token from the input stream, or if the + * token manager has not read tokens beyond this one, this field is + * set to null. This is true only if this token is also a regular + * token. Otherwise, see below for a description of the contents of + * this field. + */ + public Token next; + + /** + * This field is used to access special tokens that occur prior to this + * token, but after the immediately preceding regular (non-special) token. + * If there are no such special tokens, this field is set to null. + * When there are more than one such special token, this field refers + * to the last of these special tokens, which in turn refers to the next + * previous special token through its specialToken field, and so on + * until the first special token (whose specialToken field is null). + * The next fields of special tokens refer to other special tokens that + * immediately follow it (without an intervening regular token). If there + * is no such token, this field is null. + */ + public Token specialToken; + + /** + * An optional attribute value of the Token. + * Tokens which are not used as syntactic sugar will often contain + * meaningful values that will be used later on by the compiler or + * interpreter. This attribute value is often different from the image. + * Any subclass of Token that actually wants to return a non-null value can + * override this method as appropriate. + */ + public Object getValue() { + return null; + } + + /** + * No-argument constructor + */ + public Token() {} + + /** + * Constructs a new token for the specified Image. + */ + public Token(int kind) + { + this(kind, null); + } + + /** + * Constructs a new token for the specified Image and Kind. + */ + public Token(int kind, String image) + { + this.kind = kind; + this.image = image; + } + + /** + * Returns the image. + */ + public String toString() + { + return image; + } + + /** + * Returns a new Token object, by default. However, if you want, you + * can create and return subclass objects based on the value of ofKind. + * Simply add the cases to the switch for all those special cases. + * For example, if you have a subclass of Token called IDToken that + * you want to create if ofKind is ID, simply add something like : + * + * case MyParserConstants.ID : return new IDToken(ofKind, image); + * + * to the following switch statement. Then you can cast matchedToken + * variable to the appropriate type and use sit in your lexical actions. + */ + public static Token newToken(int ofKind, String image) + { + switch(ofKind) + { + default : return new Token(ofKind, image); + } + } + + public static Token newToken(int ofKind) + { + return newToken(ofKind, null); + } + +} +/* JavaCC - OriginalChecksum=dad2146dc89e68f66e77382c9e448fb7 (do not edit this line) */ diff --git a/theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java b/theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java new file mode 100644 index 0000000000..f093357e96 --- /dev/null +++ b/theme-compiler/src/com/vaadin/sass/internal/parser/TokenMgrError.java @@ -0,0 +1,162 @@ +/* + * 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. TokenMgrError.java Version 5.0 */ +/* JavaCCOptions: */ +package com.vaadin.sass.internal.parser; + +/** Token Manager Error. */ +public class TokenMgrError extends Error +{ + + /** + * The version identifier for this Serializable class. + * Increment only if the serialized form of the + * class changes. + */ + private static final long serialVersionUID = 1L; + + /* + * Ordinals for various reasons why an Error of this type can be thrown. + */ + + /** + * Lexical error occurred. + */ + static final int LEXICAL_ERROR = 0; + + /** + * An attempt was made to create a second instance of a static token manager. + */ + static final int STATIC_LEXER_ERROR = 1; + + /** + * Tried to change to an invalid lexical state. + */ + static final int INVALID_LEXICAL_STATE = 2; + + /** + * Detected (and bailed out of) an infinite loop in the token manager. + */ + static final int LOOP_DETECTED = 3; + + /** + * Indicates the reason why the exception is thrown. It will have + * one of the above 4 values. + */ + int errorCode; + + /** + * Replaces unprintable characters by their escaped (or unicode escaped) + * equivalents in the given string + */ + protected static final String addEscapes(String str) { + StringBuffer retval = new StringBuffer(); + char ch; + for (int i = 0; i < str.length(); i++) { + switch (str.charAt(i)) + { + case 0 : + continue; + case '\b': + retval.append("\\b"); + continue; + case '\t': + retval.append("\\t"); + continue; + case '\n': + retval.append("\\n"); + continue; + case '\f': + retval.append("\\f"); + continue; + case '\r': + retval.append("\\r"); + continue; + case '\"': + retval.append("\\\""); + continue; + case '\'': + retval.append("\\\'"); + continue; + case '\\': + retval.append("\\\\"); + continue; + default: + if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) { + String s = "0000" + Integer.toString(ch, 16); + retval.append("\\u" + s.substring(s.length() - 4, s.length())); + } else { + retval.append(ch); + } + continue; + } + } + return retval.toString(); + } + + /** + * Returns a detailed message for the Error when it is thrown by the + * token manager to indicate a lexical error. + * Parameters : + * EOFSeen : indicates if EOF caused the lexical error + * curLexState : lexical state in which this error occurred + * errorLine : line number when the error occurred + * errorColumn : column number when the error occurred + * errorAfter : prefix that was seen before this error occurred + * curchar : the offending character + * Note: You can customize the lexical error message by modifying this method. + */ + protected static String LexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) { + return("Lexical error at line " + + errorLine + ", column " + + errorColumn + ". Encountered: " + + (EOFSeen ? " " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") + + "after : \"" + addEscapes(errorAfter) + "\""); + } + + /** + * You can also modify the body of this method to customize your error messages. + * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not + * of end-users concern, so you can return something like : + * + * "Internal Error : Please file a bug report .... " + * + * from this method for such cases in the release version of your parser. + */ + public String getMessage() { + return super.getMessage(); + } + + /* + * Constructors of various flavors follow. + */ + + /** No arg constructor. */ + public TokenMgrError() { + } + + /** Constructor with message and reason. */ + public TokenMgrError(String message, int reason) { + super(message); + errorCode = reason; + } + + /** Full Constructor. */ + public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) { + this(LexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason); + } +} +/* JavaCC - OriginalChecksum=c7c96e9cf4a9320d03dd722437439354 (do not edit this line) */ diff --git a/theme-compiler/tests/src/com/vaadin/sass/parser/ParserTest.java b/theme-compiler/tests/src/com/vaadin/sass/parser/ParserTest.java index e70201b11a..1ed5075bd5 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/parser/ParserTest.java +++ b/theme-compiler/tests/src/com/vaadin/sass/parser/ParserTest.java @@ -34,7 +34,7 @@ public class ParserTest { @Test public void testParsePropertyValue() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); LexicalUnit value = parser.parsePropertyValue(new InputSource( new StringReader("$margin/2;"))); @@ -53,7 +53,7 @@ public class ParserTest { @Test public void testCanIngoreSingleLineComment() { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); try { diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/css/Interpolation.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/css/Interpolation.java index 32c4c37ce7..d823ccf860 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/css/Interpolation.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/css/Interpolation.java @@ -36,7 +36,7 @@ public class Interpolation extends AbstractTestBase { @Test public void testParser() throws CSSException, URISyntaxException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java index 9e110ecd97..6a09917d99 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Comments.java @@ -38,7 +38,7 @@ public class Comments extends AbstractTestBase { @Test public void testParser() throws CSSException, URISyntaxException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/CompassImports.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/CompassImports.java index 915bbb0f46..1e3eb09f0c 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/CompassImports.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/CompassImports.java @@ -42,7 +42,7 @@ public class CompassImports extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scssOtherDirectory) diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java index e11cb854c9..14cac4bb19 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ControlDirectives.java @@ -43,7 +43,7 @@ public class ControlDirectives extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Extends.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Extends.java index 649a5777c3..b3c20b0ab6 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Extends.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Extends.java @@ -37,7 +37,7 @@ public class Extends extends AbstractTestBase { @Test public void testParser() throws CSSException, URISyntaxException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Functions.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Functions.java index ce0875a884..5c41494ac6 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Functions.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Functions.java @@ -36,7 +36,7 @@ public class Functions extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Imports.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Imports.java index 128cc2fe06..aaa1a1439a 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Imports.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Imports.java @@ -37,7 +37,7 @@ public class Imports extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java index 0c441c7c2d..e4faee6e2a 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Mixins.java @@ -42,7 +42,7 @@ public class Mixins extends AbstractTestBase { @Test public void testParser() throws CSSException, URISyntaxException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/NestedProperties.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/NestedProperties.java index 26b61a0888..9a91df04ba 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/NestedProperties.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/NestedProperties.java @@ -38,7 +38,7 @@ public class NestedProperties extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Nesting.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Nesting.java index cd213f9de4..04aca5e8d3 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Nesting.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Nesting.java @@ -37,7 +37,7 @@ public class Nesting extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentImports.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentImports.java index 668d1e36f2..daa7dbbf07 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentImports.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentImports.java @@ -37,7 +37,7 @@ public class ParentImports extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java index a6608b75d6..443d4a1086 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/ParentSelector.java @@ -35,7 +35,7 @@ public class ParentSelector extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/VariableGuarded.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/VariableGuarded.java index 732426497f..a0727736e4 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/VariableGuarded.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/VariableGuarded.java @@ -19,7 +19,7 @@ public class VariableGuarded extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath()); diff --git a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java index d623b00112..7f71d46f0d 100644 --- a/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java +++ b/theme-compiler/tests/src/com/vaadin/sass/testcases/scss/Variables.java @@ -40,7 +40,7 @@ public class Variables extends AbstractTestBase { @Test public void testParser() throws CSSException, IOException { - Parser parser = Parser.ParserAccessor.getParser(); + Parser parser = new Parser(); SCSSDocumentHandler handler = new SCSSDocumentHandlerImpl(); parser.setDocumentHandler(handler); parser.parseStyleSheet(getClass().getResource(scss).getPath());