aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebContent/VAADIN/themes/base/datefield/datefield.scss2
-rw-r--r--WebContent/VAADIN/themes/base/menubar/menubar.scss2
-rw-r--r--WebContent/VAADIN/themes/chameleon/common/common.scss2
-rw-r--r--WebContent/VAADIN/themes/chameleon/components/button/button.scss4
-rw-r--r--WebContent/VAADIN/themes/chameleon/components/datefield/datefield.scss8
-rw-r--r--WebContent/VAADIN/themes/chameleon/components/label/label.scss14
-rw-r--r--WebContent/VAADIN/themes/chameleon/components/notification/notification.scss2
-rw-r--r--WebContent/VAADIN/themes/chameleon/components/panel/panel.scss4
-rw-r--r--WebContent/VAADIN/themes/chameleon/components/selects/selects.scss14
-rw-r--r--WebContent/VAADIN/themes/chameleon/components/table/table.scss6
-rw-r--r--WebContent/VAADIN/themes/chameleon/components/textfield/textfield.scss4
-rw-r--r--WebContent/VAADIN/themes/chameleon/compound/compound.scss2
-rw-r--r--WebContent/VAADIN/themes/liferay/button/button.scss4
-rw-r--r--WebContent/VAADIN/themes/runo/common/common.scss6
-rw-r--r--WebContent/VAADIN/themes/runo/label/label.scss2
-rw-r--r--WebContent/VAADIN/themes/runo/notification/notification.scss8
-rw-r--r--WebContent/VAADIN/themes/runo/panel/panel.scss2
-rw-r--r--client-compiler/src/com/vaadin/sass/linker/SassLinker.java11
-rw-r--r--client/src/com/vaadin/client/VTooltip.java6
-rw-r--r--client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java313
-rw-r--r--client/src/com/vaadin/client/ui/orderedlayout/Slot.java10
-rw-r--r--client/src/com/vaadin/client/ui/orderedlayout/VAbstractOrderedLayout.java115
-rw-r--r--server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java23
-rw-r--r--server/src/com/vaadin/server/VaadinServlet.java17
-rw-r--r--server/src/com/vaadin/ui/AbstractSelect.java59
-rw-r--r--server/src/com/vaadin/ui/AbstractSplitPanel.java2
-rw-r--r--theme-compiler/build.xml4
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java2346
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj42
-rw-r--r--theme-compiler/src/com/vaadin/sass/internal/visitor/ImportNodeHandler.java4
-rw-r--r--theme-compiler/tests/resources/automatic/css/microsoft-extensions.css1
-rw-r--r--theme-compiler/tests/resources/automatic/css/url-path.css5
-rw-r--r--theme-compiler/tests/resources/automatic/scss/foo/bar.scss5
-rw-r--r--theme-compiler/tests/resources/automatic/scss/microsoft-extensions.scss1
-rw-r--r--theme-compiler/tests/resources/automatic/scss/url-path.scss1
-rw-r--r--uitest/src/com/vaadin/tests/components/TooltipsOnScrollingWindow.html40
-rw-r--r--uitest/src/com/vaadin/tests/components/TooltipsOnScrollingWindow.java55
-rw-r--r--uitest/src/com/vaadin/tests/components/button/ButtonWithShortcutNotRendered.html42
-rw-r--r--uitest/src/com/vaadin/tests/components/button/ButtonWithShortcutNotRendered.java170
-rw-r--r--uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutCases.java12
-rw-r--r--uitest/src/com/vaadin/tests/components/popupview/ClickingWhilePopupOpen.html37
-rw-r--r--uitest/src/com/vaadin/tests/components/popupview/ClickingWhilePopupOpen.java26
-rw-r--r--uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java121
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/base_theme_test.html432
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/chameleon_theme_test.html432
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/liferay_theme_test.html432
-rw-r--r--uitest/src/com/vaadin/tests/components/uitest/runo_theme_test.html432
47 files changed, 3916 insertions, 1366 deletions
diff --git a/WebContent/VAADIN/themes/base/datefield/datefield.scss b/WebContent/VAADIN/themes/base/datefield/datefield.scss
index e6309aadd3..21f544cb72 100644
--- a/WebContent/VAADIN/themes/base/datefield/datefield.scss
+++ b/WebContent/VAADIN/themes/base/datefield/datefield.scss
@@ -42,7 +42,7 @@
.#{$primaryStyleName}-calendarpanel-weeknumber {
color: #999;
border-right: 1px solid #ddd;
- font-size: 0.9em;
+ font-size: 11.7px;
}
.#{$primaryStyleName}-calendarpanel-day,
.#{$primaryStyleName}-calendarpanel-day-today {
diff --git a/WebContent/VAADIN/themes/base/menubar/menubar.scss b/WebContent/VAADIN/themes/base/menubar/menubar.scss
index 732f3d3444..b5f0752c9b 100644
--- a/WebContent/VAADIN/themes/base/menubar/menubar.scss
+++ b/WebContent/VAADIN/themes/base/menubar/menubar.scss
@@ -48,7 +48,7 @@
right: 0;
width: 1em;
height: 1em;
- font-size: 0.9em;
+ font-size: 11.7px;
}
.#{$primaryStyleName}-menuitem-disabled,
.#{$primaryStyleName} span.#{$primaryStyleName}-menuitem-disabled:hover,
diff --git a/WebContent/VAADIN/themes/chameleon/common/common.scss b/WebContent/VAADIN/themes/chameleon/common/common.scss
index 050d100673..2f3dc53ef3 100644
--- a/WebContent/VAADIN/themes/chameleon/common/common.scss
+++ b/WebContent/VAADIN/themes/chameleon/common/common.scss
@@ -25,7 +25,7 @@ $chameleon-line-height: 1.4;
border: 1px solid #c0c0b9;
padding: 1px 5px;
color: #222;
- font-size: 0.9em;
+ font-size: 11.7px;
line-height: normal;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
diff --git a/WebContent/VAADIN/themes/chameleon/components/button/button.scss b/WebContent/VAADIN/themes/chameleon/components/button/button.scss
index 75970cdac7..cfb5ab2917 100644
--- a/WebContent/VAADIN/themes/chameleon/components/button/button.scss
+++ b/WebContent/VAADIN/themes/chameleon/components/button/button.scss
@@ -79,7 +79,7 @@ div.#{$primaryStyleName}-down .#{$primaryStyleName}-wrap {
* Big
******************************************************************************/
.#{$primaryStyleName}-big {
- font-size: 1.2em;
+ font-size: 15.6px;
}
@@ -87,7 +87,7 @@ div.#{$primaryStyleName}-down .#{$primaryStyleName}-wrap {
* Small
******************************************************************************/
.#{$primaryStyleName}-small {
- font-size: 0.85em;
+ font-size: 11.05px;
font-weight: normal;
}
diff --git a/WebContent/VAADIN/themes/chameleon/components/datefield/datefield.scss b/WebContent/VAADIN/themes/chameleon/components/datefield/datefield.scss
index bd9c89bb33..e63e96417c 100644
--- a/WebContent/VAADIN/themes/chameleon/components/datefield/datefield.scss
+++ b/WebContent/VAADIN/themes/chameleon/components/datefield/datefield.scss
@@ -69,7 +69,7 @@ input.#{$primaryStyleName}-textfield {
margin: 0;
padding: 0;
height: auto !important;
- font-size: 0.9em;
+ font-size: 11.7px;
}
.#{$primaryStyleName}-month .#{$primaryStyleName}-textfield {
@@ -134,7 +134,7 @@ td.#{$primaryStyleName}-calendarpanel-nextyear {
}
.#{$primaryStyleName}-calendarpanel-header button {
- font-size: 1em;
+ font-size: 13px;
line-height: normal;
width: 100%;
padding: 0 .8em;
@@ -205,7 +205,7 @@ td.#{$primaryStyleName}-calendarpanel-nextyear {
.#{$primaryStyleName}-calendarpanel-weekdays strong {
display: block;
text-align: right;
- font-size: 0.8em;
+ font-size: 10.4px;
padding: .3em .5em .35em 0;
height: 1.1em;
color: #fff;
@@ -272,7 +272,7 @@ td.#{$primaryStyleName}-calendarpanel-nextyear {
.#{$primaryStyleName}-calendarpanel-time select {
padding: 0;
- font-size: 0.9em;
+ font-size: 11.7px;
margin: 0;
}
diff --git a/WebContent/VAADIN/themes/chameleon/components/label/label.scss b/WebContent/VAADIN/themes/chameleon/components/label/label.scss
index 5952ee2802..736c29f075 100644
--- a/WebContent/VAADIN/themes/chameleon/components/label/label.scss
+++ b/WebContent/VAADIN/themes/chameleon/components/label/label.scss
@@ -18,25 +18,25 @@
.#{$primaryStyleName}-h1,
.#{$primaryStyleName} h1 {
padding: .75em 0 .5em 0;
- font-size: 1.85em;
+ font-size: 24.05px;
}
.#{$primaryStyleName}-h2,
.#{$primaryStyleName} h2 {
padding: .67em 0 .33em 0;
- font-size: 1.4em;
+ font-size: 18.2px;
}
.#{$primaryStyleName}-h3,
.#{$primaryStyleName} h3 {
margin: .71em 0 .29em 0;
- font-size: 1.1em;
+ font-size: 14.3px;
}
.#{$primaryStyleName}-h4,
.#{$primaryStyleName} h4 {
padding: .23em 0;
- font-size: 1em;
+ font-size: 13px;
}
@@ -44,7 +44,7 @@
* Big
******************************************************************************/
.#{$primaryStyleName}-big {
- font-size: 1.2em;
+ font-size: 15.6px;
}
@@ -52,7 +52,7 @@
* Small
******************************************************************************/
.#{$primaryStyleName}-small {
- font-size: 0.9em;
+ font-size: 11.7px;
line-height: 1.3;
opacity: .8;
filter: alpha(opacity=80);
@@ -63,7 +63,7 @@
* Tiny
******************************************************************************/
.#{$primaryStyleName}-tiny {
- font-size: 0.85em;
+ font-size: 11.05px;
line-height: 1.2;
opacity: .7;
filter: alpha(opacity=70);
diff --git a/WebContent/VAADIN/themes/chameleon/components/notification/notification.scss b/WebContent/VAADIN/themes/chameleon/components/notification/notification.scss
index 1218b476f5..fbf78d40c4 100644
--- a/WebContent/VAADIN/themes/chameleon/components/notification/notification.scss
+++ b/WebContent/VAADIN/themes/chameleon/components/notification/notification.scss
@@ -4,7 +4,7 @@ div.#{$primaryStyleName} {
-moz-border-radius: 0;
-webkit-border-radius: 0;
border-radius: 0;
- font-size: 16px;
+ font-size: 16px;
-webkit-box-shadow: 0 2px 5px rgba(0,0,0,.7);
-moz-box-shadow: 0 2px 5px rgba(0,0,0,.7);
box-shadow: 0 2px 5px rgba(0,0,0,.7);
diff --git a/WebContent/VAADIN/themes/chameleon/components/panel/panel.scss b/WebContent/VAADIN/themes/chameleon/components/panel/panel.scss
index bc6a8f555c..bae827b484 100644
--- a/WebContent/VAADIN/themes/chameleon/components/panel/panel.scss
+++ b/WebContent/VAADIN/themes/chameleon/components/panel/panel.scss
@@ -2,7 +2,7 @@
.#{$primaryStyleName}-caption {
background: #b9dcff;
- font-size: 1.2em;
+ font-size: 15.6px;
border: 1px solid #b3b3b3;
border-bottom: none;
padding: .2em .6em;
@@ -84,7 +84,7 @@ div.#{$primaryStyleName}-content-light {
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
margin: 1px 0;
- font-size: 1em;
+ font-size: 13px;
line-height: 1.2;
padding: .3em .6em;
}
diff --git a/WebContent/VAADIN/themes/chameleon/components/selects/selects.scss b/WebContent/VAADIN/themes/chameleon/components/selects/selects.scss
index 7810e818bf..7dac94fe9d 100644
--- a/WebContent/VAADIN/themes/chameleon/components/selects/selects.scss
+++ b/WebContent/VAADIN/themes/chameleon/components/selects/selects.scss
@@ -53,11 +53,11 @@
}
&.v-app .#{$primaryStyleName}-suggestpopup-small td {
- font-size: .85em;
+ font-size: 11.05px;
}
&.v-app .#{$primaryStyleName}-suggestpopup-big td {
- font-size: 1.1em;
+ font-size: 14.3px;
}
.#{$primaryStyleName}-big .#{$primaryStyleName}-button {
@@ -112,7 +112,7 @@
}
.#{$primaryStyleName}-status {
- font-size: .85em;
+ font-size: 11.05px;
margin: 1px 0 -3px;
user-select: none;
-webkit-user-select: none;
@@ -126,19 +126,19 @@
}
.#{$primaryStyleName}-suggestpopup-small .#{$primaryStyleName}-status {
- font-size: .8em;
+ font-size: 10.4px;
}
.#{$primaryStyleName}-suggestpopup-big .#{$primaryStyleName}-status {
- font-size: .9em;
+ font-size: 11.7px;
}
.v-select-small .v-select-select {
- font-size: 0.8em;
+ font-size: 10.4px;
}
.v-select-big .v-select-select {
- font-size: 1.2em;
+ font-size: 15.6px;
}
diff --git a/WebContent/VAADIN/themes/chameleon/components/table/table.scss b/WebContent/VAADIN/themes/chameleon/components/table/table.scss
index b3ebf44d63..41f6b2edba 100644
--- a/WebContent/VAADIN/themes/chameleon/components/table/table.scss
+++ b/WebContent/VAADIN/themes/chameleon/components/table/table.scss
@@ -96,7 +96,7 @@ div.#{$primaryStyleName}-focus-slot-right {
}
.#{$primaryStyleName}-scrollposition {
- font-size: 0.9em;
+ font-size: 11.7px;
opacity: .85;
filter: alpha(opacity=85);
}
@@ -106,7 +106,7 @@ div.#{$primaryStyleName}-focus-slot-right {
******************************************************************************/
.#{$primaryStyleName}-small .#{$primaryStyleName}-caption-container,
.#{$primaryStyleName}-small .#{$primaryStyleName}-body {
- font-size: 0.85em;
+ font-size: 11.05px;
}
.#{$primaryStyleName}-small .#{$primaryStyleName}-resizer,
@@ -124,7 +124,7 @@ div.#{$primaryStyleName}-focus-slot-right {
******************************************************************************/
.#{$primaryStyleName}-big .#{$primaryStyleName}-caption-container,
.#{$primaryStyleName}-big .#{$primaryStyleName}-body {
- font-size: 1.2em;
+ font-size: 15.6px;
}
.#{$primaryStyleName}-big .#{$primaryStyleName}-caption-container {
diff --git a/WebContent/VAADIN/themes/chameleon/components/textfield/textfield.scss b/WebContent/VAADIN/themes/chameleon/components/textfield/textfield.scss
index 860d91a6e7..787a4a4f91 100644
--- a/WebContent/VAADIN/themes/chameleon/components/textfield/textfield.scss
+++ b/WebContent/VAADIN/themes/chameleon/components/textfield/textfield.scss
@@ -74,7 +74,7 @@ textarea.v-textarea-readonly {
.v-datefield-small .v-datefield-textfield,
.v-datefield-small .v-datefield-button,
.v-filterselect-small .v-filterselect-input {
- font-size: 0.85em;
+ font-size: 11.05px;
}
@@ -86,7 +86,7 @@ textarea.v-textarea-readonly {
.v-datefield-big .v-datefield-textfield,
.v-datefield-big .v-datefield-button,
.v-filterselect-big .v-filterselect-input {
- font-size: 1.2em;
+ font-size: 15.6px;
}
input.#{$primaryStyleName}-big[type=text],
diff --git a/WebContent/VAADIN/themes/chameleon/compound/compound.scss b/WebContent/VAADIN/themes/chameleon/compound/compound.scss
index b3f0e72f8f..43a8717dbb 100644
--- a/WebContent/VAADIN/themes/chameleon/compound/compound.scss
+++ b/WebContent/VAADIN/themes/chameleon/compound/compound.scss
@@ -66,7 +66,7 @@
.sidebar-menu {
.v-label {
- font-size: 0.85em;
+ font-size: 11.05px;
text-transform: uppercase;
font-weight: bold;
letter-spacing: 0.03em;
diff --git a/WebContent/VAADIN/themes/liferay/button/button.scss b/WebContent/VAADIN/themes/liferay/button/button.scss
index 9835628d31..c604f26af9 100644
--- a/WebContent/VAADIN/themes/liferay/button/button.scss
+++ b/WebContent/VAADIN/themes/liferay/button/button.scss
@@ -28,7 +28,7 @@
.v-button .v-button-wrap,
.v-disabled.v-button .v-button-wrap {
display: block;
- font-size: 11px;
+ font-size: $font-size;
font-weight: bold;
border: 1px solid #c8c9ca;
border-right-color: #9e9e9e;
@@ -75,7 +75,7 @@ button.v-nativebutton-link-pressed,
border-style: none;
background: transparent;
padding: 0;
- font-size: inherit;
+ font-size: $font-size;
-webkit-box-shadow: none;
-mox-box-shadow: none;
-webkit-border-radius: 0;
diff --git a/WebContent/VAADIN/themes/runo/common/common.scss b/WebContent/VAADIN/themes/runo/common/common.scss
index 9d4b4a4858..36447d9593 100644
--- a/WebContent/VAADIN/themes/runo/common/common.scss
+++ b/WebContent/VAADIN/themes/runo/common/common.scss
@@ -4,8 +4,8 @@
background: #e9eced url(img/main-bg.png) repeat-x;
font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", geneva, helvetica, arial, tahoma, verdana, sans-serif;
color: #464f52;
- font-size: 13px;
- line-height: 18px;
+ font-size: $font-size;
+ line-height: $line-height;
}
/* Global font styles */
&.v-app,
@@ -32,7 +32,7 @@
.v-drag-element {
font-family: "Trebuchet MS", geneva, helvetica, arial, tahoma, verdana, sans-serif;
color: #464f52;
- font-size: 13px;
+ font-size: $font-size;
}
&.v-app select,
.v-window select {
diff --git a/WebContent/VAADIN/themes/runo/label/label.scss b/WebContent/VAADIN/themes/runo/label/label.scss
index 926f1d2cc3..50792d61a1 100644
--- a/WebContent/VAADIN/themes/runo/label/label.scss
+++ b/WebContent/VAADIN/themes/runo/label/label.scss
@@ -47,7 +47,7 @@
}
.#{$primaryStyleName}-small {
- font-size: .87em;
+ font-size: 11.31px;
line-height: 1.4;
color: #707679;
}
diff --git a/WebContent/VAADIN/themes/runo/notification/notification.scss b/WebContent/VAADIN/themes/runo/notification/notification.scss
index af0a2edc32..b8ffecf243 100644
--- a/WebContent/VAADIN/themes/runo/notification/notification.scss
+++ b/WebContent/VAADIN/themes/runo/notification/notification.scss
@@ -10,7 +10,7 @@
-webkit-border-radius: 3px;
border-radius: 3px;
overflow: hidden;
- font-size: 1.2em;
+ font-size: 15.6px;
-webkit-box-shadow: 0 3px 10px rgba(0,0,0,.3);
-moz-box-shadow: 0 3px 10px rgba(0,0,0,.3);
margin: 10px;
@@ -46,7 +46,7 @@
.#{$primaryStyleName}-tray h1 {
display: block;
font-weight: bold;
- font-size: 0.9em;
+ font-size: 11.7px;
line-height: 1;
background: #3b4245;
padding: 2px 10px;
@@ -57,14 +57,14 @@
}
.#{$primaryStyleName}-tray p {
display: block;
- font-size: 0.8em;
+ font-size: 10.4px;
line-height: 1.2;
margin: 4px 10px 5px 10px;
color: #e4e7ea;
}
.#{$primaryStyleName}-system {
background-color: #ff0a0a;
- font-size: .9em;
+ font-size: 11.7px;
padding: 14px 32px;
}
diff --git a/WebContent/VAADIN/themes/runo/panel/panel.scss b/WebContent/VAADIN/themes/runo/panel/panel.scss
index 1243cfbb77..66fb751d88 100644
--- a/WebContent/VAADIN/themes/runo/panel/panel.scss
+++ b/WebContent/VAADIN/themes/runo/panel/panel.scss
@@ -38,7 +38,7 @@
}
.#{$primaryStyleName}-deco:before {
display: block;
-
+ content: "";
width: 9px;
height: 9px;
margin-left: -9px;
diff --git a/client-compiler/src/com/vaadin/sass/linker/SassLinker.java b/client-compiler/src/com/vaadin/sass/linker/SassLinker.java
index a568ca9672..88178ba1d0 100644
--- a/client-compiler/src/com/vaadin/sass/linker/SassLinker.java
+++ b/client-compiler/src/com/vaadin/sass/linker/SassLinker.java
@@ -65,6 +65,10 @@ public class SassLinker extends AbstractLinker {
// Create the temporary files.
String partialPath = resource.getPartialPath();
if (partialPath.endsWith(".scss")) {
+ // In my opinion, the SCSS file does not need to be
+ // output to the web content folder, as they can't
+ // be used there
+ toReturn.remove(resource);
String fileName = partialPath;
File path = tempFolder;
@@ -89,11 +93,6 @@ public class SassLinker extends AbstractLinker {
// Store the file info for the compilation
scssFiles.add(new FileInfo(tempfile, partialPath));
-
- // In my opinion, the SCSS file does not need to be
- // output to the web content folder, as they can't
- // be used there
- toReturn.remove(resource);
} else {
logger.log(TreeLogger.WARN, "Duplicate file "
+ tempfile.getPath());
@@ -180,7 +179,7 @@ public class SassLinker extends AbstractLinker {
File tempDir = new File(baseTempPath + File.separator + partialPath);
if (!tempDir.exists()) {
- tempDir.mkdir();
+ tempDir.mkdirs();
}
tempDir.deleteOnExit();
diff --git a/client/src/com/vaadin/client/VTooltip.java b/client/src/com/vaadin/client/VTooltip.java
index a4c4766e4f..2fb7c39d5f 100644
--- a/client/src/com/vaadin/client/VTooltip.java
+++ b/client/src/com/vaadin/client/VTooltip.java
@@ -117,12 +117,14 @@ public class VTooltip extends VOverlay {
if (x + offsetWidth + MARGIN - Window.getScrollLeft() > Window
.getClientWidth()) {
- x = Window.getClientWidth() - offsetWidth - MARGIN;
+ x = Window.getClientWidth() - offsetWidth - MARGIN
+ + Window.getScrollLeft();
}
if (y + offsetHeight + MARGIN - Window.getScrollTop() > Window
.getClientHeight()) {
- y = tooltipEventMouseY - 5 - offsetHeight;
+ y = tooltipEventMouseY - 5 - offsetHeight
+ + Window.getScrollTop();
if (y - Window.getScrollTop() < 0) {
// tooltip does not fit on top of the mouse either,
// put it at the top of the screen
diff --git a/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java b/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
index e062d37dd6..ce16b67d8b 100644
--- a/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
+++ b/client/src/com/vaadin/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
@@ -15,14 +15,15 @@
*/
package com.vaadin.client.ui.orderedlayout;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Element;
+import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorHierarchyChangeEvent;
+import com.vaadin.client.LayoutManager;
+import com.vaadin.client.ServerConnector;
import com.vaadin.client.Util;
import com.vaadin.client.communication.StateChangeEvent;
import com.vaadin.client.communication.StateChangeEvent.StateChangeHandler;
@@ -62,35 +63,28 @@ public abstract class AbstractOrderedLayoutConnector extends
@Override
protected LayoutClickRpc getLayoutClickRPC() {
return getRpcProxy(AbstractOrderedLayoutServerRpc.class);
- };
+ }
};
private StateChangeHandler childStateChangeHandler = new StateChangeHandler() {
@Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
-
- ComponentConnector child = (ComponentConnector) stateChangeEvent
- .getConnector();
-
- // We need to update the slot size if the component size is changed
- // to relative
- Slot slot = getWidget().getSlot(child.getWidget());
- slot.setRelativeWidth(child.isRelativeWidth());
- slot.setRelativeHeight(child.isRelativeHeight());
-
- // Update slot style names
- List<String> childStyles = child.getState().styles;
- if (childStyles == null) {
- getWidget().setSlotStyleNames(child.getWidget(),
- (String[]) null);
- } else {
- getWidget().setSlotStyleNames(child.getWidget(),
- childStyles.toArray(new String[childStyles.size()]));
+ // Child state has changed, update stuff it hasn't already been done
+ updateInternalState();
+
+ /*
+ * Some changes must always be done after each child's own state
+ * change handler has been run because it might have changed some
+ * styles that are overridden here.
+ */
+ ServerConnector child = stateChangeEvent.getConnector();
+ if (child instanceof ComponentConnector) {
+ ComponentConnector component = (ComponentConnector) child;
+ Slot slot = getWidget().getSlot(component.getWidget());
+
+ slot.setRelativeWidth(component.isRelativeWidth());
+ slot.setRelativeHeight(component.isRelativeHeight());
}
-
- updateSlotListeners(child);
-
- updateLayoutHeight();
}
};
@@ -123,7 +117,6 @@ public abstract class AbstractOrderedLayoutConnector extends
if (slot != null) {
slot.setCaptionResizeListener(null);
}
- childCaptionElementHeight.remove(widgetElement);
return;
}
@@ -138,14 +131,10 @@ public abstract class AbstractOrderedLayoutConnector extends
getWidget().updateCaptionOffset(captionElement);
}
- int h = getLayoutManager().getOuterHeight(captionElement)
- - getLayoutManager().getMarginHeight(captionElement);
- childCaptionElementHeight.put(widgetElement, h);
-
updateLayoutHeight();
if (needsExpand()) {
- getWidget().updateExpand();
+ getWidget().updateExpandCompensation();
}
}
};
@@ -155,7 +144,7 @@ public abstract class AbstractOrderedLayoutConnector extends
public void onElementResize(ElementResizeEvent e) {
updateLayoutHeight();
if (needsExpand()) {
- getWidget().updateExpand();
+ getWidget().updateExpandCompensation();
}
}
};
@@ -164,7 +153,7 @@ public abstract class AbstractOrderedLayoutConnector extends
@Override
public void onElementResize(ElementResizeEvent e) {
if (needsExpand()) {
- getWidget().updateExpand();
+ getWidget().updateExpandCompensation();
}
}
};
@@ -201,42 +190,44 @@ public abstract class AbstractOrderedLayoutConnector extends
}
/**
- * For bookkeeping. Used to determine if extra calculations are needed for
- * horizontal layout.
- */
- private HashSet<ComponentConnector> hasVerticalAlignment = new HashSet<ComponentConnector>();
-
- /**
- * For bookkeeping. Used to determine if extra calculations are needed for
- * horizontal layout.
- */
- private HashSet<ComponentConnector> hasRelativeHeight = new HashSet<ComponentConnector>();
-
- /**
- * For bookkeeping. Used to determine if extra calculations are needed for
- * horizontal layout.
+ * Keep track of whether any child has relative height. Used to determine
+ * whether measurements are needed to make relative child heights work
+ * together with undefined container height.
*/
- private HashSet<ComponentConnector> hasExpandRatio = new HashSet<ComponentConnector>();
+ private boolean hasChildrenWithRelativeHeight = false;
/**
- * For bookkeeping. Used in extra calculations for horizontal layout.
+ * Keeps track of whether slots should be expanded based on available space.
*/
- private HashSet<Element> needsMeasure = new HashSet<Element>();
+ private boolean needsExpand = false;
/**
- * For bookkeeping. Used in extra calculations for horizontal layout.
+ * The id of the previous response for which state changes have been
+ * processed. If this is the same as the
+ * {@link ApplicationConnection#getLastResponseId()}, it means that we can
+ * skip some quite expensive calculations because we know that the state
+ * hasn't changed since the last time the values were calculated.
*/
- private HashMap<Element, Integer> childCaptionElementHeight = new HashMap<Element, Integer>();
+ private int processedResponseId = -1;
/*
* (non-Javadoc)
*
- * @see
- * com.vaadin.client.HasComponentsConnector#updateCaption(com.vaadin
+ * @see com.vaadin.client.HasComponentsConnector#updateCaption(com.vaadin
* .client.ComponentConnector)
*/
@Override
- public void updateCaption(ComponentConnector child) {
+ public void updateCaption(ComponentConnector connector) {
+ /*
+ * Don't directly update captions here to avoid calling e.g.
+ * updateLayoutHeight() before everything is initialized.
+ * updateInternalState() will ensure all captions are updated when
+ * appropriate.
+ */
+ updateInternalState();
+ }
+
+ private void updateCaptionInternal(ComponentConnector child) {
Slot slot = getWidget().getSlot(child.getWidget());
String caption = child.getState().caption;
@@ -274,15 +265,8 @@ public abstract class AbstractOrderedLayoutConnector extends
&& (pos == CaptionPosition.LEFT || pos == CaptionPosition.RIGHT)) {
getWidget().updateCaptionOffset(slot.getCaptionElement());
}
- } else {
- childCaptionElementHeight.remove(child.getWidget().getElement());
}
- updateLayoutHeight();
-
- if (needsExpand()) {
- getWidget().updateExpand();
- }
}
/*
@@ -312,12 +296,6 @@ public abstract class AbstractOrderedLayoutConnector extends
for (ComponentConnector child : previousChildren) {
if (child.getParent() != this) {
Slot slot = layout.getSlot(child.getWidget());
- hasVerticalAlignment.remove(child);
- hasRelativeHeight.remove(child);
- hasExpandRatio.remove(child);
- needsMeasure.remove(child.getWidget().getElement());
- childCaptionElementHeight
- .remove(child.getWidget().getElement());
slot.setWidgetResizeListener(null);
if (slot.hasCaption()) {
slot.setCaptionResizeListener(null);
@@ -330,13 +308,7 @@ public abstract class AbstractOrderedLayoutConnector extends
}
}
- // If some component is added/removed, we need to recalculate the expand
- if (needsExpand()) {
- getWidget().updateExpand();
- } else {
- getWidget().clearExpand();
- }
-
+ updateInternalState();
}
/*
@@ -354,51 +326,91 @@ public abstract class AbstractOrderedLayoutConnector extends
getWidget().setMargin(new MarginInfo(getState().marginsBitmask));
getWidget().setSpacing(getState().spacing);
- hasExpandRatio.clear();
- hasVerticalAlignment.clear();
- hasRelativeHeight.clear();
- needsMeasure.clear();
+ updateInternalState();
+ }
- boolean equalExpandRatio = getWidget().vertical ? !isUndefinedHeight()
+ /**
+ * Updates DOM properties and listeners based on the current state of this
+ * layout and its children.
+ */
+ private void updateInternalState() {
+ // Avoid updating again for the same data
+ int lastResponseId = getConnection().getLastResponseId();
+ if (processedResponseId == lastResponseId) {
+ return;
+ }
+ // Remember that everything is updated for this response
+ processedResponseId = lastResponseId;
+
+ hasChildrenWithRelativeHeight = false;
+
+ needsExpand = getWidget().vertical ? !isUndefinedHeight()
: !isUndefinedWidth();
- for (ComponentConnector child : getChildComponents()) {
- double expandRatio = getState().childData.get(child).expandRatio;
- if (expandRatio > 0) {
- equalExpandRatio = false;
- break;
+
+ boolean onlyZeroExpands = true;
+ if (needsExpand) {
+ for (ComponentConnector child : getChildComponents()) {
+ double expandRatio = getState().childData.get(child).expandRatio;
+ if (expandRatio != 0) {
+ onlyZeroExpands = false;
+ break;
+ }
}
}
+ // First update bookkeeping for all children
for (ComponentConnector child : getChildComponents()) {
+ if (child.delegateCaptionHandling()) {
+ updateCaptionInternal(child);
+ }
+
Slot slot = getWidget().getSlot(child.getWidget());
+ // Update slot style names
+ List<String> childStyles = child.getState().styles;
+ if (childStyles == null) {
+ getWidget().setSlotStyleNames(child.getWidget(),
+ (String[]) null);
+ } else {
+ getWidget().setSlotStyleNames(child.getWidget(),
+ childStyles.toArray(new String[childStyles.size()]));
+ }
+
AlignmentInfo alignment = new AlignmentInfo(
getState().childData.get(child).alignmentBitmask);
slot.setAlignment(alignment);
- double expandRatio = getState().childData.get(child).expandRatio;
+ double expandRatio = onlyZeroExpands ? 1 : getState().childData
+ .get(child).expandRatio;
- if (equalExpandRatio) {
- expandRatio = 1;
- } else if (expandRatio == 0) {
- expandRatio = -1;
- }
slot.setExpandRatio(expandRatio);
- // Bookkeeping to identify special cases that need extra
- // calculations
- if (alignment.isVerticalCenter() || alignment.isBottom()) {
- hasVerticalAlignment.add(child);
+ if (child.isRelativeHeight()) {
+ hasChildrenWithRelativeHeight = true;
}
+ }
- if (expandRatio > 0) {
- hasExpandRatio.add(child);
- }
+ if (needsFixedHeight()) {
+ // Add resize listener to ensure the widget itself is measured
+ getLayoutManager().addElementResizeListener(
+ getWidget().getElement(), childComponentResizeListener);
+ } else {
+ getLayoutManager().removeElementResizeListener(
+ getWidget().getElement(), childComponentResizeListener);
}
+ // Then update listeners based on bookkeeping
updateAllSlotListeners();
+ // Update the layout at this point to ensure it's OK even if we get no
+ // element resize events
updateLayoutHeight();
+ if (needsExpand()) {
+ getWidget().updateExpandedSizes();
+ getWidget().updateExpandCompensation();
+ } else {
+ getWidget().clearExpand();
+ }
}
/**
@@ -406,29 +418,19 @@ public abstract class AbstractOrderedLayoutConnector extends
*/
private boolean needsFixedHeight() {
boolean isVertical = getWidget().vertical;
- boolean hasChildrenWithVerticalAlignmentCenterOrBottom = !hasVerticalAlignment
- .isEmpty();
- boolean allChildrenHasVerticalAlignmentCenterOrBottom = hasVerticalAlignment
- .size() == getChildren().size();
- boolean hasChildrenWithRelativeHeight = !hasRelativeHeight.isEmpty();
if (isVertical) {
+ // Doesn't need height fix for vertical layouts
return false;
}
else if (!isUndefinedHeight()) {
+ // Fix not needed unless the height is undefined
return false;
}
else if (!hasChildrenWithRelativeHeight) {
- return false;
- }
-
- else if (!hasChildrenWithVerticalAlignmentCenterOrBottom) {
- return false;
- }
-
- else if (allChildrenHasVerticalAlignmentCenterOrBottom) {
+ // Already works if there are no relative heights
return false;
}
@@ -439,9 +441,7 @@ public abstract class AbstractOrderedLayoutConnector extends
* Does the layout need to expand?
*/
private boolean needsExpand() {
- boolean canApplyExpand = (getWidget().vertical && !isUndefinedHeight())
- || (!getWidget().vertical && !isUndefinedWidth());
- return hasExpandRatio.size() > 0 && canApplyExpand;
+ return needsExpand;
}
/**
@@ -477,27 +477,24 @@ public abstract class AbstractOrderedLayoutConnector extends
}
} else if ((child.isRelativeHeight() || child.isRelativeWidth())
&& slot.hasCaption()) {
- // If the slot has caption, we need to listen for it's size changes
- // in order to update the padding/margin offset for relative sized
- // components
+ /*
+ * If the slot has caption, we need to listen for its size changes
+ * in order to update the padding/margin offset for relative sized
+ * components.
+ *
+ * TODO might only be needed if the caption is in the same direction
+ * as the relative size?
+ */
slot.setCaptionResizeListener(slotCaptionResizeListener);
}
if (needsExpand()) {
+ // TODO widget resize only be needed for children without expand?
slot.setWidgetResizeListener(childComponentResizeListener);
if (slot.hasSpacing()) {
slot.setSpacingResizeListener(spacingResizeListener);
}
}
-
- if (child.isRelativeHeight()) {
- hasRelativeHeight.add(child);
- needsMeasure.remove(child.getWidget().getElement());
- } else {
- hasRelativeHeight.remove(child);
- needsMeasure.add(child.getWidget().getElement());
- }
-
}
/**
@@ -506,7 +503,11 @@ public abstract class AbstractOrderedLayoutConnector extends
private void updateLayoutHeight() {
if (needsFixedHeight()) {
int h = getMaxHeight();
- assert (h >= 0);
+ if (h < 0) {
+ // Postpone change if there are elements that have not yet been
+ // measured
+ return;
+ }
h += getLayoutManager().getBorderHeight(getWidget().getElement())
+ getLayoutManager().getPaddingHeight(
getWidget().getElement());
@@ -522,37 +523,49 @@ public abstract class AbstractOrderedLayoutConnector extends
int highestNonRelative = -1;
int highestRelative = -1;
+ LayoutManager layoutManager = getLayoutManager();
+
for (ComponentConnector child : getChildComponents()) {
- // TODO would be more efficient to measure the slot element if both
- // caption and child widget elements need to be measured. Keeping
- // track of what to measure is the most difficult part of this
- // layout.
- Element el = child.getWidget().getElement();
- CaptionPosition pos = getWidget().getCaptionPositionFromElement(
- (Element) el.getParentElement().cast());
- int h = getLayoutManager().getOuterHeight(el);
+ Slot slot = getWidget().getSlot(child.getWidget());
+ Element captionElement = slot.getCaptionElement();
+ CaptionPosition pos = slot.getCaptionPosition();
+
+ Element childElement = child.getWidget().getElement();
+ int h = layoutManager.getOuterHeight(childElement);
if (h == -1) {
- // Height has not yet been measured so using a more
- // conventional method instead.
- h = Util.getRequiredHeight(el);
+ // Height has not yet been measured -> postpone actions that
+ // depend on the max height
+ return -1;
}
- if (needsMeasure.contains(el)) {
- String sHeight = el.getStyle().getHeight();
- // Only add the caption size to the height of the slot if
- // coption position is top or bottom
- if (childCaptionElementHeight.containsKey(el)
- && (sHeight == null || !sHeight.endsWith("%"))
- && (pos == CaptionPosition.TOP || pos == CaptionPosition.BOTTOM)) {
- h += childCaptionElementHeight.get(el);
+
+ boolean hasRelativeHeight = slot.hasRelativeHeight();
+
+ boolean includeCaptionHeight = captionElement != null
+ && (pos == CaptionPosition.TOP || pos == CaptionPosition.BOTTOM);
+ if (!hasRelativeHeight && !includeCaptionHeight
+ && captionElement != null) {
+ String sHeight = childElement.getStyle().getHeight();
+ includeCaptionHeight = (sHeight == null || !sHeight
+ .endsWith("%"));
+ }
+
+ if (includeCaptionHeight) {
+ int captionHeight = layoutManager
+ .getOuterHeight(captionElement)
+ - getLayoutManager().getMarginHeight(captionElement);
+ if (captionHeight == -1) {
+ // Height has not yet been measured -> postpone actions that
+ // depend on the max height
+ return -1;
}
+ h += captionHeight;
+ }
+
+ if (!hasRelativeHeight) {
if (h > highestNonRelative) {
highestNonRelative = h;
}
} else {
- if (childCaptionElementHeight.containsKey(el)
- && (pos == CaptionPosition.TOP || pos == CaptionPosition.BOTTOM)) {
- h += childCaptionElementHeight.get(el);
- }
if (h > highestRelative) {
highestRelative = h;
}
diff --git a/client/src/com/vaadin/client/ui/orderedlayout/Slot.java b/client/src/com/vaadin/client/ui/orderedlayout/Slot.java
index 094a7f1f0a..fc1c10de68 100644
--- a/client/src/com/vaadin/client/ui/orderedlayout/Slot.java
+++ b/client/src/com/vaadin/client/ui/orderedlayout/Slot.java
@@ -276,7 +276,11 @@ public final class Slot extends SimplePanel {
}
/**
- * Set how the slot should be expanded relative to the other slots
+ * Set how the slot should be expanded relative to the other slots. 0 means
+ * that the slot should not participate in the division of space based on
+ * the expand ratios but instead be allocated space based on its natural
+ * size. Other values causes the slot to get a share of the otherwise
+ * unallocated space in proportion to the slot's expand ratio value.
*
* @param expandRatio
* The ratio of the space the slot should occupy
@@ -290,7 +294,9 @@ public final class Slot extends SimplePanel {
* Get the expand ratio for the slot. The expand ratio describes how the
* slot should be resized compared to other slots in the layout
*
- * @return
+ * @return the expand ratio of the slot
+ *
+ * @see #setExpandRatio(double)
*/
public double getExpandRatio() {
return expandRatio;
diff --git a/client/src/com/vaadin/client/ui/orderedlayout/VAbstractOrderedLayout.java b/client/src/com/vaadin/client/ui/orderedlayout/VAbstractOrderedLayout.java
index 00b7092d81..0199e95c58 100644
--- a/client/src/com/vaadin/client/ui/orderedlayout/VAbstractOrderedLayout.java
+++ b/client/src/com/vaadin/client/ui/orderedlayout/VAbstractOrderedLayout.java
@@ -26,10 +26,10 @@ import com.google.gwt.regexp.shared.RegExp;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.RequiresResize;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.client.LayoutManager;
import com.vaadin.client.Util;
-import com.vaadin.shared.ui.AlignmentInfo;
import com.vaadin.shared.ui.MarginInfo;
/**
@@ -50,6 +50,12 @@ public class VAbstractOrderedLayout extends FlowPanel {
private LayoutManager layoutManager;
+ /**
+ * Keep track of the last allocated expand size to help detecting when it
+ * changes.
+ */
+ private int lastExpandSize = -1;
+
public VAbstractOrderedLayout(boolean vertical) {
this.vertical = vertical;
}
@@ -332,12 +338,25 @@ public class VAbstractOrderedLayout extends FlowPanel {
}
/**
- * Triggers a recalculation of the expand width and heights
+ * Assigns relative sizes to the children that should expand based on their
+ * expand ratios.
*/
- private void recalculateExpands() {
+ public void updateExpandedSizes() {
+ // Ensure the expand wrapper is in place
+ if (expandWrapper == null) {
+ expandWrapper = DOM.createDiv();
+ expandWrapper.setClassName("v-expand");
+ while (getElement().getChildCount() > 0) {
+ Node el = getElement().getChild(0);
+ expandWrapper.appendChild(el);
+ }
+ getElement().appendChild(expandWrapper);
+ }
+
+ // Sum up expand ratios to get the denominator
double total = 0;
for (Slot slot : widgetToSlot.values()) {
- if (slot.getExpandRatio() > -1) {
+ if (slot.getExpandRatio() != 0) {
total += slot.getExpandRatio();
} else {
if (vertical) {
@@ -346,9 +365,13 @@ public class VAbstractOrderedLayout extends FlowPanel {
slot.getElement().getStyle().clearWidth();
}
}
+ slot.getElement().getStyle().clearMarginLeft();
+ slot.getElement().getStyle().clearMarginTop();
}
+
+ // Give each child its own share
for (Slot slot : widgetToSlot.values()) {
- if (slot.getExpandRatio() > -1) {
+ if (slot.getExpandRatio() != 0) {
if (vertical) {
slot.setHeight((100 * (slot.getExpandRatio() / total))
+ "%");
@@ -372,7 +395,8 @@ public class VAbstractOrderedLayout extends FlowPanel {
*/
public void clearExpand() {
if (expandWrapper != null) {
- for (; expandWrapper.getChildCount() > 0;) {
+ lastExpandSize = -1;
+ while (expandWrapper.getChildCount() > 0) {
Element el = expandWrapper.getChild(0).cast();
getElement().appendChild(el);
if (vertical) {
@@ -389,39 +413,23 @@ public class VAbstractOrderedLayout extends FlowPanel {
}
/**
- * Adds elements used to expand a slot
+ * Updates the expand compensation based on the measured sizes of children
+ * without expand.
*/
- public void updateExpand() {
+ public void updateExpandCompensation() {
boolean isExpanding = false;
for (Widget slot : getChildren()) {
- if (((Slot) slot).getExpandRatio() > -1) {
+ if (((Slot) slot).getExpandRatio() != 0) {
isExpanding = true;
- } else {
- if (vertical) {
- slot.getElement().getStyle().clearHeight();
- } else {
- slot.getElement().getStyle().clearWidth();
- }
+ break;
}
- slot.getElement().getStyle().clearMarginLeft();
- slot.getElement().getStyle().clearMarginTop();
}
if (isExpanding) {
- if (expandWrapper == null) {
- expandWrapper = DOM.createDiv();
- expandWrapper.setClassName("v-expand");
- for (; getElement().getChildCount() > 0;) {
- Node el = getElement().getChild(0);
- expandWrapper.appendChild(el);
- }
- getElement().appendChild(expandWrapper);
- }
-
int totalSize = 0;
for (Widget w : getChildren()) {
Slot slot = (Slot) w;
- if (slot.getExpandRatio() == -1) {
+ if (slot.getExpandRatio() == 0) {
if (layoutManager != null) {
// TODO check caption position
@@ -483,44 +491,21 @@ public class VAbstractOrderedLayout extends FlowPanel {
.setMarginLeft(-totalSize, Unit.PX);
}
- recalculateExpands();
- }
- }
-
- /**
- * Perform a recalculation of the layout height
- */
- public void recalculateLayoutHeight() {
- // Only needed if a horizontal layout is undefined high, and contains
- // relative height children or vertical alignments
- if (vertical || definedHeight) {
- return;
- }
-
- boolean hasRelativeHeightChildren = false;
- boolean hasVAlign = false;
-
- for (Widget slot : getChildren()) {
- Widget widget = ((Slot) slot).getWidget();
- String h = widget.getElement().getStyle().getHeight();
- if (h != null && h.indexOf("%") > -1) {
- hasRelativeHeightChildren = true;
- }
- AlignmentInfo a = ((Slot) slot).getAlignment();
- if (a != null && (a.isVerticalCenter() || a.isBottom())) {
- hasVAlign = true;
- }
- }
-
- if (hasRelativeHeightChildren || hasVAlign) {
- int newHeight;
- if (layoutManager != null) {
- newHeight = layoutManager.getOuterHeight(getElement())
- - layoutManager.getMarginHeight(getElement());
- } else {
- newHeight = getElement().getOffsetHeight();
+ // Measure expanded children again if their size might have changed
+ if (totalSize != lastExpandSize) {
+ lastExpandSize = totalSize;
+ for (Widget w : getChildren()) {
+ Slot slot = (Slot) w;
+ if (slot.getExpandRatio() != 0) {
+ if (layoutManager != null) {
+ layoutManager.setNeedsMeasure(Util
+ .findConnectorFor(slot.getWidget()));
+ } else if (slot.getWidget() instanceof RequiresResize) {
+ ((RequiresResize) slot.getWidget()).onResize();
+ }
+ }
+ }
}
- getElement().getStyle().setHeight(newHeight, Unit.PX);
}
}
diff --git a/server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java b/server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
index 12cb892090..065810a7b4 100644
--- a/server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
+++ b/server/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
@@ -854,7 +854,21 @@ public class SQLContainer implements Container, Container.Filterable,
* Does NOT remove sorting or filtering rules!
*/
public void refresh() {
- sizeDirty = true;
+ refresh(true);
+ }
+
+ /**
+ * Refreshes the container. If <code>setSizeDirty</code> is
+ * <code>false</code>, assumes that the current size is up to date. This is
+ * used in {@link #updateCount()} to refresh the contents when we know the
+ * size was just updated.
+ *
+ * @param setSizeDirty
+ */
+ private void refresh(boolean setSizeDirty) {
+ if (setSizeDirty) {
+ sizeDirty = true;
+ }
currentOffset = 0;
cachedItems.clear();
itemIndexes.clear();
@@ -1105,12 +1119,13 @@ public class SQLContainer implements Container, Container.Filterable,
"The query delegate doesn't support filtering", e);
}
int newSize = delegate.getCount();
+ sizeUpdated = new Date();
+ sizeDirty = false;
if (newSize != size) {
size = newSize;
- refresh();
+ // Size is up to date so don't set it back to dirty in refresh()
+ refresh(false);
}
- sizeUpdated = new Date();
- sizeDirty = false;
getLogger().log(Level.FINER,
"Updated row count. New count is: " + size);
} catch (SQLException e) {
diff --git a/server/src/com/vaadin/server/VaadinServlet.java b/server/src/com/vaadin/server/VaadinServlet.java
index b099767b4f..fbb3750b3b 100644
--- a/server/src/com/vaadin/server/VaadinServlet.java
+++ b/server/src/com/vaadin/server/VaadinServlet.java
@@ -878,6 +878,23 @@ public class VaadinServlet extends HttpServlet implements Constants {
response.setHeader("Cache-Control", cacheControl);
}
+ writeStaticResourceResponse(request, response, resourceUrl);
+ }
+
+ /**
+ * Writes the contents of the given resourceUrl in the response. Can be
+ * overridden to add/modify response headers and similar.
+ *
+ * @param request
+ * The request for the resource
+ * @param response
+ * The response
+ * @param resourceUrl
+ * The url to send
+ * @throws IOException
+ */
+ protected void writeStaticResourceResponse(HttpServletRequest request,
+ HttpServletResponse response, URL resourceUrl) throws IOException {
// Write the resource to the client.
final OutputStream os = response.getOutputStream();
final byte buffer[] = new byte[DEFAULT_BUFFER_SIZE];
diff --git a/server/src/com/vaadin/ui/AbstractSelect.java b/server/src/com/vaadin/ui/AbstractSelect.java
index ac80dfbb74..5a674d4b89 100644
--- a/server/src/com/vaadin/ui/AbstractSelect.java
+++ b/server/src/com/vaadin/ui/AbstractSelect.java
@@ -17,6 +17,7 @@
package com.vaadin.ui;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.EventObject;
@@ -25,6 +26,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -896,6 +898,42 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
}
/**
+ * Checks that the current selection is valid, i.e. the selected item ids
+ * exist in the container. Updates the selection if one or several selected
+ * item ids are no longer available in the container.
+ */
+ @SuppressWarnings("unchecked")
+ public void sanitizeSelection() {
+ Object value = getValue();
+ if (value == null) {
+ return;
+ }
+
+ boolean changed = false;
+
+ if (isMultiSelect()) {
+ Collection<Object> valueAsCollection = (Collection<Object>) value;
+ List<Object> newSelection = new ArrayList<Object>(
+ valueAsCollection.size());
+ for (Object subValue : valueAsCollection) {
+ if (containsId(subValue)) {
+ newSelection.add(subValue);
+ } else {
+ changed = true;
+ }
+ }
+ if (changed) {
+ setValue(newSelection);
+ }
+ } else {
+ if (!containsId(value)) {
+ setValue(null);
+ }
+ }
+
+ }
+
+ /**
* Removes the property from all items. Removes a property with given id
* from all the items in the container.
*
@@ -943,11 +981,11 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
if (items != null) {
if (items instanceof Container.ItemSetChangeNotifier) {
((Container.ItemSetChangeNotifier) items)
- .removeListener(this);
+ .removeItemSetChangeListener(this);
}
if (items instanceof Container.PropertySetChangeNotifier) {
((Container.PropertySetChangeNotifier) items)
- .removeListener(this);
+ .removePropertySetChangeListener(this);
}
}
@@ -960,11 +998,12 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
// Adds listeners
if (items != null) {
if (items instanceof Container.ItemSetChangeNotifier) {
- ((Container.ItemSetChangeNotifier) items).addListener(this);
+ ((Container.ItemSetChangeNotifier) items)
+ .addItemSetChangeListener(this);
}
if (items instanceof Container.PropertySetChangeNotifier) {
((Container.PropertySetChangeNotifier) items)
- .addListener(this);
+ .addPropertySetChangeListener(this);
}
}
@@ -1829,7 +1868,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
}
if (i instanceof Item.PropertySetChangeNotifier) {
((Item.PropertySetChangeNotifier) i)
- .addListener(getCaptionChangeListener());
+ .addPropertySetChangeListener(getCaptionChangeListener());
captionChangeNotifiers.add(i);
}
Collection<?> pids = i.getItemPropertyIds();
@@ -1839,7 +1878,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
if (p != null
&& p instanceof Property.ValueChangeNotifier) {
((Property.ValueChangeNotifier) p)
- .addListener(getCaptionChangeListener());
+ .addValueChangeListener(getCaptionChangeListener());
captionChangeNotifiers.add(p);
}
}
@@ -1851,7 +1890,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
getItemCaptionPropertyId());
if (p != null && p instanceof Property.ValueChangeNotifier) {
((Property.ValueChangeNotifier) p)
- .addListener(getCaptionChangeListener());
+ .addValueChangeListener(getCaptionChangeListener());
captionChangeNotifiers.add(p);
}
break;
@@ -1862,7 +1901,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
getItemIconPropertyId());
if (p != null && p instanceof Property.ValueChangeNotifier) {
((Property.ValueChangeNotifier) p)
- .addListener(getCaptionChangeListener());
+ .addValueChangeListener(getCaptionChangeListener());
captionChangeNotifiers.add(p);
}
}
@@ -1874,10 +1913,10 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
Object notifier = it.next();
if (notifier instanceof Item.PropertySetChangeNotifier) {
((Item.PropertySetChangeNotifier) notifier)
- .removeListener(getCaptionChangeListener());
+ .removePropertySetChangeListener(getCaptionChangeListener());
} else {
((Property.ValueChangeNotifier) notifier)
- .removeListener(getCaptionChangeListener());
+ .removeValueChangeListener(getCaptionChangeListener());
}
}
captionChangeNotifiers.clear();
diff --git a/server/src/com/vaadin/ui/AbstractSplitPanel.java b/server/src/com/vaadin/ui/AbstractSplitPanel.java
index 5e3f7ec24d..689feda7ed 100644
--- a/server/src/com/vaadin/ui/AbstractSplitPanel.java
+++ b/server/src/com/vaadin/ui/AbstractSplitPanel.java
@@ -357,7 +357,7 @@ public abstract class AbstractSplitPanel extends AbstractComponentContainer {
* the unit (from {@link Sizeable}) in which the size is given.
* Allowed units are UNITS_PERCENTAGE and UNITS_PIXELS
*/
- public void setMinSplitPosition(int pos, Unit unit) {
+ public void setMinSplitPosition(float pos, Unit unit) {
setSplitPositionLimits(pos, unit, getSplitterState().maxPosition,
posMaxUnit);
}
diff --git a/theme-compiler/build.xml b/theme-compiler/build.xml
index 48ee9fdc73..1f9cddebd7 100644
--- a/theme-compiler/build.xml
+++ b/theme-compiler/build.xml
@@ -20,8 +20,8 @@
<!--<property name="classes.exclude" value="com/vaadin/buildhelpers/**" />-->
<target name="parser">
- <!-- Copy javacc-5.0.jar to ${result.path}/javacc/javacc.jar as the javacc task requires the jar to be named javacc.jar -->
- <property name="javacc.home" location="${result.path}/javacc" />
+ <!-- Copy javacc-5.0.jar to ${result.dir}/javacc/javacc.jar as the javacc task requires the jar to be named javacc.jar -->
+ <property name="javacc.home" location="${result.dir}/javacc" />
<ivy:retrieve organisation="net.java.dev.javacc" module="javacc" revision="5.0" inline="true" type="jar" pattern="${javacc.home}/[artifact].[ext]" />
<javacc target="${sass.parser.jj}" javacchome="${javacc.home}">
</javacc>
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 83e46c34c9..52a93389e0 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.java
@@ -551,63 +551,50 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
label_7:
while (true) {
;
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case VARIABLE:
- if (jj_2_1(5)) {
- listModifyDirective();
- } else {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case VARIABLE:
- variable();
- break;
- default:
- jj_la1[8] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- }
- break;
- case DEBUG_SYM:
- debugDirective();
- break;
- case WARN_SYM:
- warnDirective();
- break;
- case IF_SYM:
- ifDirective();
- break;
- case MIXIN_SYM:
- mixinDirective();
- break;
- case EACH_SYM:
- eachDirective();
- break;
- case INCLUDE_SYM:
- includeDirective();
- break;
- 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[9] = jj_gen;
+ if (jj_2_1(5)) {
+ listModifyDirective();
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case VARIABLE:
+ variable();
+ break;
+ 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 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[8] = jj_gen;
l = getLocator();
- ret = skipStatement();
+ ret = skipStatement();
if ((ret == null) || (ret.length() == 0)) {
{if (true) return;}
}
@@ -616,6 +603,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
} else {
reportWarningSkipText(l, ret);
}
+ }
}
label_8:
while (true) {
@@ -626,7 +614,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[10] = jj_gen;
+ jj_la1[9] = jj_gen;
break label_8;
}
ignoreStatement();
@@ -637,7 +625,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[11] = jj_gen;
+ jj_la1[10] = jj_gen;
break label_9;
}
jj_consume_token(S);
@@ -658,7 +646,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
atRuleDeclaration();
break;
default:
- jj_la1[12] = jj_gen;
+ jj_la1[11] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -683,7 +671,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[13] = jj_gen;
+ jj_la1[12] = jj_gen;
break label_10;
}
jj_consume_token(S);
@@ -704,7 +692,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
}
break;
default:
- jj_la1[14] = jj_gen;
+ jj_la1[13] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -715,7 +703,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[15] = jj_gen;
+ jj_la1[14] = jj_gen;
break label_11;
}
jj_consume_token(S);
@@ -725,7 +713,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
mediaStatement(ml);
break;
default:
- jj_la1[16] = jj_gen;
+ jj_la1[15] = jj_gen;
;
}
jj_consume_token(SEMICOLON);
@@ -736,7 +724,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[17] = jj_gen;
+ jj_la1[16] = jj_gen;
break label_12;
}
jj_consume_token(S);
@@ -770,7 +758,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[18] = jj_gen;
+ jj_la1[17] = jj_gen;
break label_13;
}
jj_consume_token(S);
@@ -785,7 +773,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[19] = jj_gen;
+ jj_la1[18] = jj_gen;
break label_14;
}
jj_consume_token(S);
@@ -831,15 +819,13 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[20] = jj_gen;
+ jj_la1[19] = jj_gen;
break label_15;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case DEBUG_SYM:
- debugDirective();
- break;
case WARN_SYM:
- warnDirective();
+ debuggingDirective();
break;
case LBRACKET:
case ANY:
@@ -879,7 +865,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
skipUnknownRule();
break;
default:
- jj_la1[21] = jj_gen;
+ jj_la1[20] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -892,7 +878,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[22] = jj_gen;
+ jj_la1[21] = jj_gen;
break label_16;
}
jj_consume_token(S);
@@ -919,7 +905,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[23] = jj_gen;
+ jj_la1[22] = jj_gen;
break label_17;
}
jj_consume_token(COMMA);
@@ -930,7 +916,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[24] = jj_gen;
+ jj_la1[23] = jj_gen;
break label_18;
}
jj_consume_token(S);
@@ -954,7 +940,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[25] = jj_gen;
+ jj_la1[24] = jj_gen;
break label_19;
}
jj_consume_token(S);
@@ -980,7 +966,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[26] = jj_gen;
+ jj_la1[25] = jj_gen;
break label_20;
}
jj_consume_token(S);
@@ -995,14 +981,14 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[27] = jj_gen;
+ jj_la1[26] = jj_gen;
break label_21;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[28] = jj_gen;
+ jj_la1[27] = jj_gen;
;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1010,7 +996,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
pseudo = pseudo_page();
break;
default:
- jj_la1[29] = jj_gen;
+ jj_la1[28] = jj_gen;
;
}
if (n != null) {
@@ -1024,7 +1010,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[30] = jj_gen;
+ jj_la1[29] = jj_gen;
break label_22;
}
jj_consume_token(S);
@@ -1036,7 +1022,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[31] = jj_gen;
+ jj_la1[30] = jj_gen;
;
}
label_23:
@@ -1046,7 +1032,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[32] = jj_gen;
+ jj_la1[31] = jj_gen;
break label_23;
}
jj_consume_token(SEMICOLON);
@@ -1057,7 +1043,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[33] = jj_gen;
+ jj_la1[32] = jj_gen;
break label_24;
}
jj_consume_token(S);
@@ -1067,7 +1053,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[34] = jj_gen;
+ jj_la1[33] = jj_gen;
;
}
}
@@ -1079,7 +1065,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[35] = jj_gen;
+ jj_la1[34] = jj_gen;
break label_25;
}
jj_consume_token(S);
@@ -1113,7 +1099,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[36] = jj_gen;
+ jj_la1[35] = jj_gen;
break label_26;
}
jj_consume_token(S);
@@ -1133,7 +1119,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[37] = jj_gen;
+ jj_la1[36] = jj_gen;
break label_27;
}
jj_consume_token(S);
@@ -1146,7 +1132,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[38] = jj_gen;
+ jj_la1[37] = jj_gen;
break label_28;
}
jj_consume_token(S);
@@ -1157,7 +1143,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[39] = jj_gen;
+ jj_la1[38] = jj_gen;
;
}
label_29:
@@ -1167,7 +1153,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[40] = jj_gen;
+ jj_la1[39] = jj_gen;
break label_29;
}
jj_consume_token(SEMICOLON);
@@ -1178,7 +1164,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[41] = jj_gen;
+ jj_la1[40] = jj_gen;
break label_30;
}
jj_consume_token(S);
@@ -1188,7 +1174,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
declaration();
break;
default:
- jj_la1[42] = jj_gen;
+ jj_la1[41] = jj_gen;
;
}
}
@@ -1200,7 +1186,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
;
break;
default:
- jj_la1[43] = jj_gen;
+ jj_la1[42] = jj_gen;
break label_31;
}
jj_consume_token(S);
@@ -1311,7 +1297,7 @@ public class Parser implements org.w3c.css.sac.Parser, ParserConstants {
n = jj_consume_token(UNKNOWN);
break;
default:
- jj_la1[44] = jj_gen;
+ jj_la1[43] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1340,7 +1326,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[45] = jj_gen;
+ jj_la1[44] = jj_gen;
break label_32;
}
jj_consume_token(S);
@@ -1356,7 +1342,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[46] = jj_gen;
+ jj_la1[45] = jj_gen;
break label_33;
}
jj_consume_token(S);
@@ -1372,7 +1358,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[47] = jj_gen;
+ jj_la1[46] = jj_gen;
break label_34;
}
jj_consume_token(S);
@@ -1399,7 +1385,7 @@ char connector = ' ';
connector = '~';
break;
default:
- jj_la1[48] = jj_gen;
+ jj_la1[47] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1410,20 +1396,20 @@ char connector = ' ';
;
break;
default:
- jj_la1[49] = jj_gen;
+ jj_la1[48] = jj_gen;
break label_35;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[50] = jj_gen;
+ jj_la1[49] = jj_gen;
;
}
{if (true) return connector;}
break;
default:
- jj_la1[51] = jj_gen;
+ jj_la1[50] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1434,7 +1420,8 @@ char connector = ' ';
Token n;
String name = "";
String value = "";
- n = jj_consume_token(MICROSOFT_RULE);
+ // This is not really taking the syntax of filter rules into account
+ n = jj_consume_token(MICROSOFT_RULE);
label_36:
while (true) {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1442,7 +1429,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[52] = jj_gen;
+ jj_la1[51] = jj_gen;
break label_36;
}
jj_consume_token(S);
@@ -1460,6 +1447,14 @@ char connector = ' ';
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;
@@ -1490,24 +1485,26 @@ char connector = ' ';
{ value += n.image; }
break;
default:
- jj_la1[53] = jj_gen;
+ jj_la1[52] = 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[54] = jj_gen;
+ jj_la1[53] = jj_gen;
break label_37;
}
}
@@ -1519,7 +1516,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[55] = jj_gen;
+ jj_la1[54] = jj_gen;
break label_38;
}
jj_consume_token(S);
@@ -1540,7 +1537,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[56] = jj_gen;
+ jj_la1[55] = jj_gen;
break label_39;
}
jj_consume_token(S);
@@ -1559,7 +1556,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[57] = jj_gen;
+ jj_la1[56] = jj_gen;
break label_40;
}
jj_consume_token(S);
@@ -1578,7 +1575,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[58] = jj_gen;
+ jj_la1[57] = jj_gen;
break label_41;
}
jj_consume_token(S);
@@ -1606,7 +1603,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[59] = jj_gen;
+ jj_la1[58] = jj_gen;
break label_42;
}
jj_consume_token(S);
@@ -1636,59 +1633,24 @@ char connector = ' ';
;
break;
default:
- jj_la1[60] = jj_gen;
+ jj_la1[59] = jj_gen;
break label_43;
}
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case IF_SYM:
- ifDirective();
- break;
- default:
- jj_la1[61] = jj_gen;
- if (jj_2_2(5)) {
- listModifyDirective();
- } else {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case INCLUDE_SYM:
- includeDirective();
- break;
- case MEDIA_SYM:
- media();
- break;
- case EXTEND_SYM:
- extendDirective();
- break;
- case EACH_SYM:
- eachDirective();
- break;
- case VARIABLE:
- variable();
- break;
- default:
- jj_la1[62] = jj_gen;
- if (jj_2_3(3)) {
- microsoftExtension();
- } else {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case LBRACKET:
- case ANY:
- case PARENT:
- case DOT:
- case COLON:
- case INTERPOLATION:
- case DEBUG_SYM:
- case WARN_SYM:
- case IDENT:
- case HASH:
- styleRuleOrDeclarationOrNestedProperties();
- break;
- default:
- jj_la1[63] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- }
- }
+ if (jj_2_2(5)) {
+ ifContentStatement();
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case EACH_SYM:
+ case IF_SYM:
+ controlDirective();
+ break;
+ case MICROSOFT_RULE:
+ microsoftExtension();
+ break;
+ default:
+ jj_la1[60] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
}
}
}
@@ -1700,7 +1662,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[64] = jj_gen;
+ jj_la1[61] = jj_gen;
break label_44;
}
jj_consume_token(S);
@@ -1737,7 +1699,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[65] = jj_gen;
+ jj_la1[62] = jj_gen;
break label_45;
}
jj_consume_token(COMMA);
@@ -1748,7 +1710,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[66] = jj_gen;
+ jj_la1[63] = jj_gen;
break label_46;
}
jj_consume_token(S);
@@ -1771,7 +1733,7 @@ char connector = ' ';
selector = simple_selector(null, ' ');
label_47:
while (true) {
- if (jj_2_4(2)) {
+ if (jj_2_3(2)) {
;
} else {
break label_47;
@@ -1786,7 +1748,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[67] = jj_gen;
+ jj_la1[64] = jj_gen;
break label_48;
}
jj_consume_token(S);
@@ -1841,7 +1803,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[68] = jj_gen;
+ jj_la1[65] = jj_gen;
break label_49;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1858,7 +1820,7 @@ char connector = ' ';
cond = pseudo(cond);
break;
default:
- jj_la1[69] = jj_gen;
+ jj_la1[66] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1875,7 +1837,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[70] = jj_gen;
+ jj_la1[67] = jj_gen;
break label_50;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1889,7 +1851,7 @@ char connector = ' ';
cond = pseudo(cond);
break;
default:
- jj_la1[71] = jj_gen;
+ jj_la1[68] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1907,7 +1869,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[72] = jj_gen;
+ jj_la1[69] = jj_gen;
break label_51;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1924,7 +1886,7 @@ char connector = ' ';
cond = pseudo(cond);
break;
default:
- jj_la1[73] = jj_gen;
+ jj_la1[70] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1942,7 +1904,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[74] = jj_gen;
+ jj_la1[71] = jj_gen;
break label_52;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1959,7 +1921,7 @@ char connector = ' ';
cond = pseudo(cond);
break;
default:
- jj_la1[75] = jj_gen;
+ jj_la1[72] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -1977,7 +1939,7 @@ char connector = ' ';
;
break;
default:
- jj_la1[76] = jj_gen;
+ jj_la1[73] = jj_gen;
break label_53;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1994,14 +1956,14 @@ char connector = ' ';
cond = pseudo(cond);
break;
default:
- jj_la1[77] = jj_gen;
+ jj_la1[74] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
break;
default:
- jj_la1[78] = jj_gen;
+ jj_la1[75] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2053,7 +2015,7 @@ String s = ".";
s += t.image;
break;
default:
- jj_la1[79] = jj_gen;
+ jj_la1[76] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2063,7 +2025,7 @@ String s = ".";
;
break;
default:
- jj_la1[80] = jj_gen;
+ jj_la1[77] = jj_gen;
break label_54;
}
}
@@ -2095,7 +2057,7 @@ String s = ".";
s += t.image;
break;
default:
- jj_la1[81] = jj_gen;
+ jj_la1[78] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2105,7 +2067,7 @@ String s = ".";
;
break;
default:
- jj_la1[82] = jj_gen;
+ jj_la1[79] = jj_gen;
break label_55;
}
}
@@ -2120,7 +2082,7 @@ String s = ".";
{if (true) return "&";}
break;
default:
- jj_la1[83] = jj_gen;
+ jj_la1[80] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2143,7 +2105,7 @@ String s = ".";
;
break;
default:
- jj_la1[84] = jj_gen;
+ jj_la1[81] = jj_gen;
break label_56;
}
jj_consume_token(S);
@@ -2156,7 +2118,7 @@ String s = ".";
;
break;
default:
- jj_la1[85] = jj_gen;
+ jj_la1[82] = jj_gen;
break label_57;
}
jj_consume_token(S);
@@ -2194,7 +2156,7 @@ String s = ".";
cases = 6;
break;
default:
- jj_la1[86] = jj_gen;
+ jj_la1[83] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2205,7 +2167,7 @@ String s = ".";
;
break;
default:
- jj_la1[87] = jj_gen;
+ jj_la1[84] = jj_gen;
break label_58;
}
jj_consume_token(S);
@@ -2220,7 +2182,7 @@ String s = ".";
attValue = val.image;
break;
default:
- jj_la1[88] = jj_gen;
+ jj_la1[85] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2231,14 +2193,14 @@ String s = ".";
;
break;
default:
- jj_la1[89] = jj_gen;
+ jj_la1[86] = jj_gen;
break label_59;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[90] = jj_gen;
+ jj_la1[87] = jj_gen;
;
}
jj_consume_token(RBRACKET);
@@ -2294,7 +2256,7 @@ boolean isPseudoElement = false;
isPseudoElement=true;
break;
default:
- jj_la1[91] = jj_gen;
+ jj_la1[88] = jj_gen;
;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2327,7 +2289,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[92] = jj_gen;
+ jj_la1[89] = jj_gen;
break label_60;
}
jj_consume_token(S);
@@ -2345,7 +2307,7 @@ boolean isPseudoElement = false;
}
break;
default:
- jj_la1[93] = jj_gen;
+ jj_la1[90] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2382,7 +2344,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[94] = jj_gen;
+ jj_la1[91] = jj_gen;
break label_61;
}
jj_consume_token(S);
@@ -2393,7 +2355,7 @@ boolean isPseudoElement = false;
guarded = guarded();
break;
default:
- jj_la1[95] = jj_gen;
+ jj_la1[92] = jj_gen;
;
}
label_62:
@@ -2406,7 +2368,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[96] = jj_gen;
+ jj_la1[93] = jj_gen;
break label_63;
}
jj_consume_token(S);
@@ -2416,7 +2378,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[97] = jj_gen;
+ jj_la1[94] = jj_gen;
break label_62;
}
}
@@ -2448,6 +2410,58 @@ boolean isPseudoElement = false;
}
}
+ 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[95] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ }
+
+ final public void ifContentStatement() throws ParseException {
+ if (jj_2_4(5)) {
+ listModifyDirective();
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case INCLUDE_SYM:
+ includeDirective();
+ break;
+ case MEDIA_SYM:
+ media();
+ break;
+ case EXTEND_SYM:
+ extendDirective();
+ break;
+ case VARIABLE:
+ variable();
+ break;
+ case LBRACKET:
+ case ANY:
+ case PARENT:
+ case DOT:
+ case COLON:
+ case INTERPOLATION:
+ case DEBUG_SYM:
+ case WARN_SYM:
+ case IDENT:
+ case HASH:
+ styleRuleOrDeclarationOrNestedProperties();
+ break;
+ default:
+ jj_la1[96] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ }
+ }
+
final public void ifDirective() throws ParseException {
Token n = null;
String evaluator = "";
@@ -2477,7 +2491,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[98] = jj_gen;
+ jj_la1[97] = jj_gen;
break label_64;
}
}
@@ -2489,7 +2503,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[99] = jj_gen;
+ jj_la1[98] = jj_gen;
break label_65;
}
jj_consume_token(S);
@@ -2516,39 +2530,10 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[100] = jj_gen;
+ jj_la1[99] = jj_gen;
break label_66;
}
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case INCLUDE_SYM:
- includeDirective();
- break;
- case MEDIA_SYM:
- media();
- break;
- case EXTEND_SYM:
- extendDirective();
- break;
- case VARIABLE:
- variable();
- break;
- case LBRACKET:
- case ANY:
- case PARENT:
- case DOT:
- case COLON:
- case INTERPOLATION:
- case DEBUG_SYM:
- case WARN_SYM:
- case IDENT:
- case HASH:
- styleRuleOrDeclarationOrNestedProperties();
- break;
- default:
- jj_la1[101] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
+ ifContentStatement();
}
jj_consume_token(RBRACE);
label_67:
@@ -2558,7 +2543,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[102] = jj_gen;
+ jj_la1[100] = jj_gen;
break label_67;
}
jj_consume_token(S);
@@ -2570,7 +2555,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[103] = jj_gen;
+ jj_la1[101] = jj_gen;
break label_68;
}
elseDirective();
@@ -2589,7 +2574,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[104] = jj_gen;
+ jj_la1[102] = jj_gen;
break label_69;
}
jj_consume_token(S);
@@ -2599,6 +2584,8 @@ boolean isPseudoElement = false;
jj_consume_token(IF);
label_70:
while (true) {
+ n = booleanExpressionToken();
+ evaluator += n.image;
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case S:
case EQ:
@@ -2620,15 +2607,13 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[105] = jj_gen;
+ jj_la1[103] = jj_gen;
break label_70;
}
- n = booleanExpressionToken();
- if(n != null) evaluator += n.image;
}
break;
default:
- jj_la1[106] = jj_gen;
+ jj_la1[104] = jj_gen;
;
}
jj_consume_token(LBRACE);
@@ -2639,7 +2624,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[107] = jj_gen;
+ jj_la1[105] = jj_gen;
break label_71;
}
jj_consume_token(S);
@@ -2666,39 +2651,10 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[108] = jj_gen;
+ jj_la1[106] = jj_gen;
break label_72;
}
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case INCLUDE_SYM:
- includeDirective();
- break;
- case MEDIA_SYM:
- media();
- break;
- case EXTEND_SYM:
- extendDirective();
- break;
- case VARIABLE:
- variable();
- break;
- case LBRACKET:
- case ANY:
- case PARENT:
- case DOT:
- case COLON:
- case INTERPOLATION:
- case DEBUG_SYM:
- case WARN_SYM:
- case IDENT:
- case HASH:
- styleRuleOrDeclarationOrNestedProperties();
- break;
- default:
- jj_la1[109] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
+ ifContentStatement();
}
jj_consume_token(RBRACE);
label_73:
@@ -2708,7 +2664,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[110] = jj_gen;
+ jj_la1[107] = jj_gen;
break label_73;
}
jj_consume_token(S);
@@ -2770,7 +2726,7 @@ boolean isPseudoElement = false;
n = jj_consume_token(NOT_EQ);
break;
default:
- jj_la1[111] = jj_gen;
+ jj_la1[108] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2790,7 +2746,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[112] = jj_gen;
+ jj_la1[109] = jj_gen;
break label_74;
}
jj_consume_token(S);
@@ -2803,7 +2759,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[113] = jj_gen;
+ jj_la1[110] = jj_gen;
break label_75;
}
jj_consume_token(S);
@@ -2816,7 +2772,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[114] = jj_gen;
+ jj_la1[111] = jj_gen;
break label_76;
}
jj_consume_token(S);
@@ -2831,7 +2787,7 @@ boolean isPseudoElement = false;
documentHandler.startEachDirective(var.image, listVariable);
break;
default:
- jj_la1[115] = jj_gen;
+ jj_la1[112] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -2843,7 +2799,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[116] = jj_gen;
+ jj_la1[113] = jj_gen;
break label_77;
}
jj_consume_token(S);
@@ -2868,47 +2824,10 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[117] = jj_gen;
+ jj_la1[114] = jj_gen;
break label_78;
}
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case INCLUDE_SYM:
- includeDirective();
- break;
- default:
- jj_la1[118] = jj_gen;
- if (jj_2_5(5)) {
- listModifyDirective();
- } else {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case MEDIA_SYM:
- media();
- break;
- case EXTEND_SYM:
- extendDirective();
- break;
- case VARIABLE:
- variable();
- break;
- case LBRACKET:
- case ANY:
- case PARENT:
- case DOT:
- case COLON:
- case INTERPOLATION:
- case DEBUG_SYM:
- case WARN_SYM:
- case IDENT:
- case HASH:
- styleRuleOrDeclarationOrNestedProperties();
- break;
- default:
- jj_la1[119] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
- }
- }
+ ifContentStatement();
}
jj_consume_token(RBRACE);
label_79:
@@ -2918,7 +2837,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[120] = jj_gen;
+ jj_la1[115] = jj_gen;
break label_79;
}
jj_consume_token(S);
@@ -2937,7 +2856,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[121] = jj_gen;
+ jj_la1[116] = jj_gen;
break label_80;
}
jj_consume_token(S);
@@ -2950,7 +2869,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[122] = jj_gen;
+ jj_la1[117] = jj_gen;
break label_81;
}
jj_consume_token(COMMA);
@@ -2961,7 +2880,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[123] = jj_gen;
+ jj_la1[118] = jj_gen;
break label_82;
}
jj_consume_token(S);
@@ -2975,7 +2894,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[124] = jj_gen;
+ jj_la1[119] = jj_gen;
break label_83;
}
jj_consume_token(S);
@@ -2997,7 +2916,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[125] = jj_gen;
+ jj_la1[120] = jj_gen;
break label_84;
}
jj_consume_token(S);
@@ -3017,14 +2936,14 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[126] = jj_gen;
+ jj_la1[121] = jj_gen;
break label_85;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[127] = jj_gen;
+ jj_la1[122] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3036,7 +2955,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[128] = jj_gen;
+ jj_la1[123] = jj_gen;
break label_86;
}
jj_consume_token(S);
@@ -3066,57 +2985,27 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[129] = jj_gen;
+ jj_la1[124] = jj_gen;
break label_87;
}
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case INCLUDE_SYM:
- includeDirective();
- break;
- case MEDIA_SYM:
- media();
- break;
- default:
- jj_la1[130] = jj_gen;
- if (jj_2_6(5)) {
- listModifyDirective();
- } else {
- switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
- case IF_SYM:
- ifDirective();
- break;
- case EACH_SYM:
- eachDirective();
- break;
- case EXTEND_SYM:
- extendDirective();
- break;
- case VARIABLE:
- variable();
- break;
- 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 FONT_FACE_SYM:
- fontFace();
- break;
- case PAGE_SYM:
- page();
- break;
- default:
- jj_la1[131] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
+ if (jj_2_5(5)) {
+ ifContentStatement();
+ } else {
+ switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+ case EACH_SYM:
+ case IF_SYM:
+ controlDirective();
+ break;
+ case FONT_FACE_SYM:
+ fontFace();
+ break;
+ case PAGE_SYM:
+ page();
+ break;
+ default:
+ jj_la1[125] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
}
}
}
@@ -3128,7 +3017,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[132] = jj_gen;
+ jj_la1[126] = jj_gen;
break label_88;
}
jj_consume_token(S);
@@ -3148,7 +3037,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[133] = jj_gen;
+ jj_la1[127] = jj_gen;
break label_89;
}
jj_consume_token(COMMA);
@@ -3159,7 +3048,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[134] = jj_gen;
+ jj_la1[128] = jj_gen;
break label_90;
}
jj_consume_token(S);
@@ -3208,7 +3097,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[135] = jj_gen;
+ jj_la1[129] = jj_gen;
break label_91;
}
jj_consume_token(S);
@@ -3217,7 +3106,7 @@ boolean isPseudoElement = false;
prev = first;
label_92:
while (true) {
- if (jj_2_7(3)) {
+ if (jj_2_6(3)) {
;
} else {
break label_92;
@@ -3232,14 +3121,14 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[136] = jj_gen;
+ jj_la1[130] = jj_gen;
break label_93;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[137] = jj_gen;
+ jj_la1[131] = jj_gen;
;
}
prev = nonVariableTerm(prev);
@@ -3251,13 +3140,13 @@ boolean isPseudoElement = false;
prev, variable.image);
break;
default:
- jj_la1[138] = jj_gen;
+ jj_la1[132] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[139] = jj_gen;
+ jj_la1[133] = jj_gen;
;
}
VariableNode arg = new VariableNode(name, first, false);
@@ -3307,7 +3196,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[140] = jj_gen;
+ jj_la1[134] = jj_gen;
break label_94;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3320,14 +3209,14 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[141] = jj_gen;
+ jj_la1[135] = jj_gen;
break label_95;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[142] = jj_gen;
+ jj_la1[136] = jj_gen;
;
}
next = term(prev);
@@ -3340,7 +3229,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[143] = jj_gen;
+ jj_la1[137] = jj_gen;
break label_96;
}
jj_consume_token(COMMA);
@@ -3351,7 +3240,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[144] = jj_gen;
+ jj_la1[138] = jj_gen;
break label_97;
}
jj_consume_token(S);
@@ -3393,7 +3282,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[145] = jj_gen;
+ jj_la1[139] = jj_gen;
break label_98;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -3406,14 +3295,14 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[146] = jj_gen;
+ jj_la1[140] = jj_gen;
break label_99;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[147] = jj_gen;
+ jj_la1[141] = jj_gen;
;
}
next = term(prev);
@@ -3435,7 +3324,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[148] = jj_gen;
+ jj_la1[142] = jj_gen;
break label_100;
}
jj_consume_token(S);
@@ -3457,7 +3346,7 @@ boolean isPseudoElement = false;
jj_consume_token(RPARAN);
break;
default:
- jj_la1[149] = jj_gen;
+ jj_la1[143] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -3471,7 +3360,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[150] = jj_gen;
+ jj_la1[144] = jj_gen;
break label_102;
}
jj_consume_token(S);
@@ -3481,7 +3370,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[151] = jj_gen;
+ jj_la1[145] = jj_gen;
break label_101;
}
}
@@ -3496,11 +3385,11 @@ boolean isPseudoElement = false;
}
final public void listModifyDirective() throws ParseException {
- if (jj_2_8(5)) {
+ if (jj_2_7(5)) {
removeDirective();
- } else if (jj_2_9(5)) {
+ } else if (jj_2_8(5)) {
appendDirective();
- } else if (jj_2_10(5)) {
+ } else if (jj_2_9(5)) {
containsDirective();
} else {
jj_consume_token(-1);
@@ -3526,7 +3415,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[152] = jj_gen;
+ jj_la1[146] = jj_gen;
break label_103;
}
jj_consume_token(S);
@@ -3539,7 +3428,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[153] = jj_gen;
+ jj_la1[147] = jj_gen;
break label_104;
}
jj_consume_token(S);
@@ -3552,7 +3441,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[154] = jj_gen;
+ jj_la1[148] = jj_gen;
break label_105;
}
jj_consume_token(S);
@@ -3563,7 +3452,7 @@ boolean isPseudoElement = false;
jj_consume_token(RPARAN);
break;
default:
- jj_la1[155] = jj_gen;
+ jj_la1[149] = jj_gen;
;
}
jj_consume_token(COMMA);
@@ -3574,7 +3463,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[156] = jj_gen;
+ jj_la1[150] = jj_gen;
break label_106;
}
jj_consume_token(S);
@@ -3590,7 +3479,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[157] = jj_gen;
+ jj_la1[151] = jj_gen;
break label_107;
}
jj_consume_token(S);
@@ -3604,14 +3493,14 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[158] = jj_gen;
+ jj_la1[152] = jj_gen;
break label_108;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[159] = jj_gen;
+ jj_la1[153] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -3622,7 +3511,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[160] = jj_gen;
+ jj_la1[154] = jj_gen;
break label_109;
}
jj_consume_token(S);
@@ -3635,7 +3524,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[161] = jj_gen;
+ jj_la1[155] = jj_gen;
break label_110;
}
jj_consume_token(S);
@@ -3661,7 +3550,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[162] = jj_gen;
+ jj_la1[156] = jj_gen;
break label_111;
}
jj_consume_token(S);
@@ -3674,7 +3563,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[163] = jj_gen;
+ jj_la1[157] = jj_gen;
break label_112;
}
jj_consume_token(S);
@@ -3687,7 +3576,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[164] = jj_gen;
+ jj_la1[158] = jj_gen;
break label_113;
}
jj_consume_token(S);
@@ -3698,7 +3587,7 @@ boolean isPseudoElement = false;
jj_consume_token(RPARAN);
break;
default:
- jj_la1[165] = jj_gen;
+ jj_la1[159] = jj_gen;
;
}
jj_consume_token(COMMA);
@@ -3709,7 +3598,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[166] = jj_gen;
+ jj_la1[160] = jj_gen;
break label_114;
}
jj_consume_token(S);
@@ -3725,7 +3614,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[167] = jj_gen;
+ jj_la1[161] = jj_gen;
break label_115;
}
jj_consume_token(S);
@@ -3739,14 +3628,14 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[168] = jj_gen;
+ jj_la1[162] = jj_gen;
break label_116;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[169] = jj_gen;
+ jj_la1[163] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -3757,7 +3646,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[170] = jj_gen;
+ jj_la1[164] = jj_gen;
break label_117;
}
jj_consume_token(S);
@@ -3770,7 +3659,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[171] = jj_gen;
+ jj_la1[165] = jj_gen;
break label_118;
}
jj_consume_token(S);
@@ -3796,7 +3685,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[172] = jj_gen;
+ jj_la1[166] = jj_gen;
break label_119;
}
jj_consume_token(S);
@@ -3809,7 +3698,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[173] = jj_gen;
+ jj_la1[167] = jj_gen;
break label_120;
}
jj_consume_token(S);
@@ -3822,7 +3711,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[174] = jj_gen;
+ jj_la1[168] = jj_gen;
break label_121;
}
jj_consume_token(S);
@@ -3833,7 +3722,7 @@ boolean isPseudoElement = false;
jj_consume_token(RPARAN);
break;
default:
- jj_la1[175] = jj_gen;
+ jj_la1[169] = jj_gen;
;
}
jj_consume_token(COMMA);
@@ -3844,7 +3733,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[176] = jj_gen;
+ jj_la1[170] = jj_gen;
break label_122;
}
jj_consume_token(S);
@@ -3860,7 +3749,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[177] = jj_gen;
+ jj_la1[171] = jj_gen;
break label_123;
}
jj_consume_token(S);
@@ -3874,14 +3763,14 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[178] = jj_gen;
+ jj_la1[172] = jj_gen;
break label_124;
}
jj_consume_token(S);
}
break;
default:
- jj_la1[179] = jj_gen;
+ jj_la1[173] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -3892,7 +3781,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[180] = jj_gen;
+ jj_la1[174] = jj_gen;
break label_125;
}
jj_consume_token(S);
@@ -3905,7 +3794,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[181] = jj_gen;
+ jj_la1[175] = jj_gen;
break label_126;
}
jj_consume_token(S);
@@ -3992,6 +3881,21 @@ boolean isPseudoElement = false;
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[176] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+ }
+
final public void debugDirective() throws ParseException {
jj_consume_token(DEBUG_SYM);
String content = skipStatementUntilSemiColon();
@@ -4004,7 +3908,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[182] = jj_gen;
+ jj_la1[177] = jj_gen;
break label_127;
}
jj_consume_token(S);
@@ -4023,7 +3927,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[183] = jj_gen;
+ jj_la1[178] = jj_gen;
break label_128;
}
jj_consume_token(S);
@@ -4050,7 +3954,7 @@ boolean isPseudoElement = false;
exclusive = false;
break;
default:
- jj_la1[184] = jj_gen;
+ jj_la1[179] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4062,7 +3966,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[185] = jj_gen;
+ jj_la1[180] = jj_gen;
break label_129;
}
jj_consume_token(S);
@@ -4091,7 +3995,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[186] = jj_gen;
+ jj_la1[181] = jj_gen;
break label_130;
}
jj_consume_token(S);
@@ -4107,7 +4011,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[187] = jj_gen;
+ jj_la1[182] = jj_gen;
break label_132;
}
jj_consume_token(S);
@@ -4117,7 +4021,7 @@ boolean isPseudoElement = false;
;
break;
default:
- jj_la1[188] = jj_gen;
+ jj_la1[183] = jj_gen;
break label_131;
}
}
@@ -4152,7 +4056,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[189] = jj_gen;
+ jj_la1[184] = jj_gen;
break label_133;
}
jj_consume_token(S);
@@ -4165,7 +4069,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[190] = jj_gen;
+ jj_la1[185] = jj_gen;
break label_134;
}
jj_consume_token(S);
@@ -4176,7 +4080,7 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[191] = jj_gen;
+ jj_la1[186] = jj_gen;
;
}
label_135:
@@ -4186,7 +4090,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[192] = jj_gen;
+ jj_la1[187] = jj_gen;
break label_135;
}
jj_consume_token(SEMICOLON);
@@ -4197,7 +4101,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[193] = jj_gen;
+ jj_la1[188] = jj_gen;
break label_136;
}
jj_consume_token(S);
@@ -4207,7 +4111,7 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[194] = jj_gen;
+ jj_la1[189] = jj_gen;
;
}
}
@@ -4220,7 +4124,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[195] = jj_gen;
+ jj_la1[190] = jj_gen;
break label_137;
}
jj_consume_token(S);
@@ -4232,21 +4136,19 @@ LexicalUnit exp;
*/
final public void styleRuleOrDeclarationOrNestedProperties() throws ParseException {
try {
- if (jj_2_11(5)) {
+ if (jj_2_10(5)) {
styleRule();
} else {
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case DEBUG_SYM:
- debugDirective();
- break;
case WARN_SYM:
- warnDirective();
+ debuggingDirective();
break;
case IDENT:
declarationOrNestedProperties();
break;
default:
- jj_la1[196] = jj_gen;
+ jj_la1[191] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4297,7 +4199,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[197] = jj_gen;
+ jj_la1[192] = jj_gen;
break label_138;
}
jj_consume_token(S);
@@ -4337,7 +4239,7 @@ LexicalUnit exp;
important = prio();
break;
default:
- jj_la1[198] = jj_gen;
+ jj_la1[193] = jj_gen;
;
}
Token next = getToken(1);
@@ -4362,7 +4264,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[199] = jj_gen;
+ jj_la1[194] = jj_gen;
break label_139;
}
jj_consume_token(S);
@@ -4373,7 +4275,7 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[200] = jj_gen;
+ jj_la1[195] = jj_gen;
;
}
label_140:
@@ -4383,7 +4285,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[201] = jj_gen;
+ jj_la1[196] = jj_gen;
break label_140;
}
jj_consume_token(SEMICOLON);
@@ -4394,7 +4296,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[202] = jj_gen;
+ jj_la1[197] = jj_gen;
break label_141;
}
jj_consume_token(S);
@@ -4404,7 +4306,7 @@ LexicalUnit exp;
declaration();
break;
default:
- jj_la1[203] = jj_gen;
+ jj_la1[198] = jj_gen;
;
}
}
@@ -4416,7 +4318,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[204] = jj_gen;
+ jj_la1[199] = jj_gen;
break label_142;
}
jj_consume_token(S);
@@ -4424,7 +4326,7 @@ LexicalUnit exp;
documentHandler.endNestedProperties(name);
break;
default:
- jj_la1[205] = jj_gen;
+ jj_la1[200] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4481,7 +4383,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[206] = jj_gen;
+ jj_la1[201] = jj_gen;
break label_143;
}
jj_consume_token(S);
@@ -4492,7 +4394,7 @@ LexicalUnit exp;
important = prio();
break;
default:
- jj_la1[207] = jj_gen;
+ jj_la1[202] = jj_gen;
;
}
documentHandler.property(name, exp, important);
@@ -4542,7 +4444,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[208] = jj_gen;
+ jj_la1[203] = jj_gen;
break label_144;
}
jj_consume_token(S);
@@ -4560,7 +4462,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[209] = jj_gen;
+ jj_la1[204] = jj_gen;
break label_145;
}
jj_consume_token(S);
@@ -4584,7 +4486,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[210] = jj_gen;
+ jj_la1[205] = jj_gen;
break label_146;
}
jj_consume_token(S);
@@ -4602,7 +4504,7 @@ LexicalUnit exp;
;
break;
default:
- jj_la1[211] = jj_gen;
+ jj_la1[206] = jj_gen;
break label_147;
}
jj_consume_token(S);
@@ -4612,7 +4514,7 @@ LexicalUnit exp;
prev);}
break;
default:
- jj_la1[212] = jj_gen;
+ jj_la1[207] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4629,7 +4531,7 @@ LexicalUnit exp;
res = first;
label_148:
while (true) {
- if (jj_2_12(2)) {
+ if (jj_2_11(2)) {
;
} else {
break label_148;
@@ -4640,7 +4542,7 @@ LexicalUnit exp;
res = operator(res);
break;
default:
- jj_la1[213] = jj_gen;
+ jj_la1[208] = jj_gen;
;
}
res = term(res);
@@ -4663,7 +4565,7 @@ LexicalUnit exp;
{if (true) return '+';}
break;
default:
- jj_la1[214] = jj_gen;
+ jj_la1[209] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4711,7 +4613,7 @@ LexicalUnit exp;
result = variableTerm(prev);
break;
default:
- jj_la1[215] = jj_gen;
+ jj_la1[210] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4762,7 +4664,7 @@ LexicalUnitImpl result = null;
op = unaryOperator();
break;
default:
- jj_la1[216] = jj_gen;
+ jj_la1[211] = jj_gen;
;
}
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -4867,7 +4769,7 @@ LexicalUnitImpl result = null;
result = function(op, prev);
break;
default:
- jj_la1[217] = jj_gen;
+ jj_la1[212] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4894,7 +4796,7 @@ LexicalUnitImpl result = null;
s+=".";
break;
default:
- jj_la1[218] = jj_gen;
+ jj_la1[213] = jj_gen;
;
}
n = jj_consume_token(IDENT);
@@ -4941,13 +4843,13 @@ LexicalUnitImpl result = null;
result = unicode(prev);
break;
default:
- jj_la1[219] = jj_gen;
+ jj_la1[214] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
default:
- jj_la1[220] = jj_gen;
+ jj_la1[215] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -4958,7 +4860,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[221] = jj_gen;
+ jj_la1[216] = jj_gen;
break label_149;
}
jj_consume_token(S);
@@ -4982,7 +4884,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[222] = jj_gen;
+ jj_la1[217] = jj_gen;
break label_150;
}
jj_consume_token(S);
@@ -5025,7 +4927,7 @@ LexicalUnitImpl result = null;
params = expr();
break;
default:
- jj_la1[223] = jj_gen;
+ jj_la1[218] = jj_gen;
;
}
jj_consume_token(RPARAN);
@@ -5503,7 +5405,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[224] = jj_gen;
+ jj_la1[219] = jj_gen;
break label_151;
}
jj_consume_token(S);
@@ -5513,10 +5415,8 @@ LexicalUnitImpl result = null;
importDeclaration();
break;
case DEBUG_SYM:
- debugDirective();
- break;
case WARN_SYM:
- warnDirective();
+ debuggingDirective();
break;
case LBRACKET:
case ANY:
@@ -5538,7 +5438,7 @@ LexicalUnitImpl result = null;
fontFace();
break;
default:
- jj_la1[225] = jj_gen;
+ jj_la1[220] = jj_gen;
ret = skipStatement();
if ((ret == null) || (ret.length() == 0)) {
{if (true) return;}
@@ -5560,7 +5460,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[226] = jj_gen;
+ jj_la1[221] = jj_gen;
break label_152;
}
jj_consume_token(S);
@@ -5576,7 +5476,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[227] = jj_gen;
+ jj_la1[222] = jj_gen;
break label_153;
}
jj_consume_token(S);
@@ -5592,7 +5492,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[228] = jj_gen;
+ jj_la1[223] = jj_gen;
break label_154;
}
jj_consume_token(S);
@@ -5602,7 +5502,7 @@ LexicalUnitImpl result = null;
declaration();
break;
default:
- jj_la1[229] = jj_gen;
+ jj_la1[224] = jj_gen;
;
}
label_155:
@@ -5612,7 +5512,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[230] = jj_gen;
+ jj_la1[225] = jj_gen;
break label_155;
}
jj_consume_token(SEMICOLON);
@@ -5623,7 +5523,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[231] = jj_gen;
+ jj_la1[226] = jj_gen;
break label_156;
}
jj_consume_token(S);
@@ -5633,7 +5533,7 @@ LexicalUnitImpl result = null;
declaration();
break;
default:
- jj_la1[232] = jj_gen;
+ jj_la1[227] = jj_gen;
;
}
}
@@ -5649,7 +5549,7 @@ LexicalUnitImpl result = null;
;
break;
default:
- jj_la1[233] = jj_gen;
+ jj_la1[228] = jj_gen;
break label_157;
}
jj_consume_token(S);
@@ -5739,15 +5639,26 @@ LexicalUnitImpl result = null;
finally { jj_save(10, xla); }
}
- private boolean jj_2_12(int xla) {
- jj_la = xla; jj_lastpos = jj_scanpos = token;
- try { return !jj_3_12(); }
- catch(LookaheadSuccess ls) { return true; }
- finally { jj_save(11, xla); }
+ private boolean jj_3_10() {
+ if (jj_3R_167()) return true;
+ return false;
}
- private boolean jj_3R_231() {
- if (jj_3R_253()) return true;
+ private boolean jj_3_5() {
+ if (jj_3R_159()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_195() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3_10()) {
+ jj_scanpos = xsp;
+ if (jj_3R_246()) {
+ jj_scanpos = xsp;
+ if (jj_3R_247()) return true;
+ }
+ }
return false;
}
@@ -5757,34 +5668,36 @@ LexicalUnitImpl result = null;
}
private boolean jj_3R_230() {
- if (jj_3R_252()) return true;
+ if (jj_3R_261()) return true;
return false;
}
- private boolean jj_3_11() {
- if (jj_3R_167()) return true;
+ private boolean jj_3R_277() {
+ if (jj_3R_243()) return true;
return false;
}
- private boolean jj_3_4() {
+ private boolean jj_3R_174() {
+ if (jj_3R_195()) return true;
+ return false;
+ }
+
+ private boolean jj_3_3() {
if (jj_3R_160()) return true;
if (jj_3R_161()) return true;
return false;
}
- private boolean jj_3R_257() {
+ private boolean jj_3R_255() {
+ if (jj_scan_token(FUNCTION)) return true;
Token xsp;
- xsp = jj_scanpos;
- if (jj_3_11()) {
- jj_scanpos = xsp;
- if (jj_3R_272()) {
- jj_scanpos = xsp;
- if (jj_3R_273()) {
- jj_scanpos = xsp;
- if (jj_3R_274()) 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(RPARAN)) return true;
return false;
}
@@ -5799,17 +5712,12 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3_5() {
- if (jj_3R_158()) return true;
- return false;
- }
-
private boolean jj_3R_227() {
if (jj_3R_161()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3_4()) { jj_scanpos = xsp; break; }
+ if (jj_3_3()) { jj_scanpos = xsp; break; }
}
while (true) {
xsp = jj_scanpos;
@@ -5818,55 +5726,32 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_262() {
- if (jj_3R_271()) return true;
- return false;
- }
-
- private boolean jj_3R_246() {
- 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_262()) jj_scanpos = xsp;
- if (jj_scan_token(RPARAN)) return true;
+ private boolean jj_3R_173() {
+ if (jj_3R_194()) return true;
return false;
}
- private boolean jj_3R_182() {
- if (jj_3R_227()) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_228()) { jj_scanpos = xsp; break; }
- }
+ private boolean jj_3R_229() {
+ if (jj_3R_260()) return true;
return false;
}
private boolean jj_3R_226() {
- if (jj_3R_250()) return true;
- return false;
- }
-
- private boolean jj_3_2() {
- if (jj_3R_158()) return true;
+ if (jj_3R_259()) return true;
return false;
}
private boolean jj_3R_225() {
- if (jj_3R_249()) return true;
+ if (jj_3R_258()) return true;
return false;
}
private boolean jj_3R_224() {
- if (jj_3R_248()) return true;
+ if (jj_3R_257()) return true;
return false;
}
- private boolean jj_3R_255() {
+ private boolean jj_3R_296() {
if (jj_scan_token(EACH_SYM)) return true;
Token xsp;
while (true) {
@@ -5882,84 +5767,71 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_270() {
- if (jj_scan_token(SEMICOLON)) return true;
+ private boolean jj_3R_186() {
+ if (jj_3R_227()) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_228()) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_183() {
+ private boolean jj_3R_241() {
+ if (jj_scan_token(SEMICOLON)) return true;
Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_229()) {
- jj_scanpos = xsp;
- if (jj_3_2()) {
- 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_3_3()) {
- jj_scanpos = xsp;
- if (jj_3R_235()) return true;
- }
- }
- }
- }
- }
- }
- }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_229() {
- if (jj_3R_251()) return true;
+ private boolean jj_3R_172() {
+ if (jj_3R_193()) return true;
return false;
}
- private boolean jj_3R_254() {
+ private boolean jj_3R_193() {
if (jj_scan_token(EXTEND_SYM)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
- if (jj_3R_182()) return true;
- if (jj_3R_270()) return true;
+ if (jj_3R_186()) return true;
+ if (jj_3R_241()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_270()) { jj_scanpos = xsp; break; }
+ if (jj_3R_241()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_167() {
- if (jj_3R_182()) return true;
- if (jj_scan_token(LBRACE)) return true;
+ private boolean jj_3R_171() {
+ if (jj_3R_192()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_187() {
Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ xsp = jj_scanpos;
+ if (jj_3_2()) {
+ jj_scanpos = xsp;
+ if (jj_3R_229()) {
+ jj_scanpos = xsp;
+ if (jj_3R_230()) return true;
}
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_183()) { jj_scanpos = xsp; break; }
- }
- if (jj_scan_token(RBRACE)) return true;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_247() {
+ private boolean jj_3_2() {
+ if (jj_3R_159()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_256() {
if (jj_scan_token(DOT)) return true;
return false;
}
@@ -5967,12 +5839,12 @@ LexicalUnitImpl result = null;
private boolean jj_3R_223() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_247()) jj_scanpos = xsp;
+ if (jj_3R_256()) jj_scanpos = xsp;
if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_282() {
+ private boolean jj_3R_352() {
Token xsp;
xsp = jj_scanpos;
if (jj_scan_token(75)) {
@@ -6027,9 +5899,48 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_285() {
- if (jj_scan_token(FUNCTION)) return true;
+ private boolean jj_3R_222() {
+ if (jj_scan_token(STRING)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_221() {
+ if (jj_3R_255()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_185() {
Token xsp;
+ xsp = jj_scanpos;
+ 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()) return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_167() {
+ if (jj_3R_186()) return true;
+ if (jj_scan_token(LBRACE)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_187()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(RBRACE)) return true;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
@@ -6037,8 +5948,13 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_283() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_170() {
+ if (jj_3R_191()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_264() {
+ if (jj_scan_token(FUNCTION)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
@@ -6047,12 +5963,27 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_222() {
- if (jj_scan_token(STRING)) return true;
+ private boolean jj_3R_220() {
+ if (jj_scan_token(DIMEN)) return true;
return false;
}
- private boolean jj_3R_258() {
+ private boolean jj_3R_219() {
+ if (jj_scan_token(KHZ)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_262() {
+ if (jj_scan_token(IDENT)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_242() {
if (jj_scan_token(VARIABLE)) return true;
Token xsp;
while (true) {
@@ -6062,130 +5993,236 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_221() {
- if (jj_3R_246()) return true;
+ private boolean jj_3R_218() {
+ if (jj_scan_token(HZ)) return true;
return false;
}
- private boolean jj_3R_181() {
+ private boolean jj_3R_245() {
+ if (jj_scan_token(SEMICOLON)) return true;
Token xsp;
- xsp = jj_scanpos;
- 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()) return true;
- }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
+ return false;
+ }
+
+ private boolean jj_3R_310() {
+ if (jj_scan_token(WARN_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_217() {
+ if (jj_scan_token(MS)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_285() {
+ if (jj_3R_310()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_216() {
+ if (jj_scan_token(SECOND)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_215() {
+ if (jj_scan_token(GRAD)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_338() {
+ if (jj_3R_352()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_279() {
+ if (jj_3R_296()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_214() {
+ if (jj_scan_token(RAD)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_295() {
+ if (jj_scan_token(IF_SYM)) return true;
+ Token xsp;
+ if (jj_3R_338()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_338()) { jj_scanpos = xsp; break; }
}
+ if (jj_scan_token(LBRACE)) return true;
return false;
}
- private boolean jj_3R_220() {
- if (jj_scan_token(DIMEN)) return true;
+ private boolean jj_3R_309() {
+ if (jj_scan_token(DEBUG_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_195() {
+ private boolean jj_3R_307() {
if (jj_scan_token(S)) return true;
return false;
}
- private boolean jj_3R_219() {
- if (jj_scan_token(KHZ)) return true;
+ private boolean jj_3R_213() {
+ if (jj_scan_token(DEG)) return true;
return false;
}
- private boolean jj_3R_194() {
+ private boolean jj_3R_306() {
if (jj_scan_token(DOT)) return true;
return false;
}
- private boolean jj_3R_193() {
+ private boolean jj_3R_305() {
if (jj_scan_token(EQ)) return true;
return false;
}
- private boolean jj_3R_192() {
+ private boolean jj_3R_304() {
if (jj_scan_token(RPARAN)) return true;
return false;
}
- private boolean jj_3R_218() {
- if (jj_scan_token(HZ)) return true;
+ private boolean jj_3R_212() {
+ if (jj_scan_token(EXS)) return true;
return false;
}
- private boolean jj_3R_191() {
+ private boolean jj_3R_303() {
if (jj_scan_token(FUNCTION)) return true;
return false;
}
- private boolean jj_3R_190() {
+ private boolean jj_3R_302() {
if (jj_scan_token(COLON)) return true;
return false;
}
- private boolean jj_3R_290() {
- if (jj_scan_token(WARN_SYM)) return true;
+ private boolean jj_3R_301() {
+ if (jj_scan_token(INTERPOLATION)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_211() {
+ if (jj_scan_token(EMS)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_300() {
+ if (jj_scan_token(COMMA)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_159() {
Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ xsp = jj_scanpos;
+ if (jj_3_4()) {
+ jj_scanpos = xsp;
+ if (jj_3R_170()) {
+ jj_scanpos = xsp;
+ if (jj_3R_171()) {
+ jj_scanpos = xsp;
+ if (jj_3R_172()) {
+ jj_scanpos = xsp;
+ if (jj_3R_173()) {
+ jj_scanpos = xsp;
+ if (jj_3R_174()) return true;
+ }
+ }
+ }
+ }
}
return false;
}
- private boolean jj_3R_189() {
- if (jj_scan_token(INTERPOLATION)) return true;
+ private boolean jj_3_4() {
+ if (jj_3R_158()) return true;
return false;
}
- private boolean jj_3R_217() {
- if (jj_scan_token(MS)) return true;
+ private boolean jj_3R_299() {
+ if (jj_scan_token(STRING)) return true;
return false;
}
- private boolean jj_3R_188() {
+ private boolean jj_3R_244() {
+ if (jj_3R_271()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_272() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_284()) {
+ jj_scanpos = xsp;
+ if (jj_3R_285()) return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_284() {
+ if (jj_3R_309()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_298() {
if (jj_scan_token(NUMBER)) return true;
return false;
}
- private boolean jj_3R_263() {
- if (jj_3R_282()) return true;
+ private boolean jj_3R_210() {
+ if (jj_scan_token(PX)) return true;
return false;
}
- private boolean jj_3R_187() {
+ private boolean jj_3R_297() {
if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_170() {
+ private boolean jj_3R_280() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_187()) {
+ if (jj_3R_297()) {
jj_scanpos = xsp;
- if (jj_3R_188()) {
+ if (jj_3R_298()) {
jj_scanpos = xsp;
- if (jj_3R_189()) {
+ if (jj_3R_299()) {
jj_scanpos = xsp;
- if (jj_3R_190()) {
+ if (jj_3R_300()) {
jj_scanpos = xsp;
- if (jj_3R_191()) {
+ if (jj_3R_301()) {
jj_scanpos = xsp;
- if (jj_3R_192()) {
+ if (jj_3R_302()) {
jj_scanpos = xsp;
- if (jj_3R_193()) {
+ if (jj_3R_303()) {
jj_scanpos = xsp;
- if (jj_3R_194()) {
+ if (jj_3R_304()) {
jj_scanpos = xsp;
- if (jj_3R_195()) return true;
+ if (jj_3R_305()) {
+ jj_scanpos = xsp;
+ if (jj_3R_306()) {
+ jj_scanpos = xsp;
+ if (jj_3R_307()) return true;
+ }
+ }
}
}
}
@@ -6197,44 +6234,37 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_216() {
- if (jj_scan_token(SECOND)) return true;
+ private boolean jj_3R_209() {
+ if (jj_scan_token(IN)) return true;
return false;
}
- private boolean jj_3R_251() {
- if (jj_scan_token(IF_SYM)) return true;
+ private boolean jj_3R_260() {
Token xsp;
- if (jj_3R_263()) return true;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_263()) { jj_scanpos = xsp; break; }
+ xsp = jj_scanpos;
+ if (jj_3R_278()) {
+ jj_scanpos = xsp;
+ if (jj_3R_279()) return true;
}
- if (jj_scan_token(LBRACE)) return true;
return false;
}
- private boolean jj_3R_215() {
- if (jj_scan_token(GRAD)) return true;
+ private boolean jj_3R_278() {
+ if (jj_3R_295()) return true;
return false;
}
- private boolean jj_3R_214() {
- if (jj_scan_token(RAD)) return true;
+ private boolean jj_3R_208() {
+ if (jj_scan_token(PC)) return true;
return false;
}
- private boolean jj_3R_289() {
- if (jj_scan_token(DEBUG_SYM)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
+ private boolean jj_3R_207() {
+ if (jj_scan_token(MM)) return true;
return false;
}
- private boolean jj_3R_159() {
+ private boolean jj_3R_261() {
if (jj_scan_token(MICROSOFT_RULE)) return true;
Token xsp;
while (true) {
@@ -6242,52 +6272,52 @@ LexicalUnitImpl result = null;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
if (jj_scan_token(COLON)) return true;
- if (jj_3R_170()) return true;
+ if (jj_3R_280()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_170()) { jj_scanpos = xsp; break; }
+ if (jj_3R_280()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_213() {
- if (jj_scan_token(DEG)) return true;
+ private boolean jj_3R_206() {
+ if (jj_scan_token(CM)) return true;
return false;
}
- private boolean jj_3R_241() {
+ private boolean jj_3R_250() {
if (jj_scan_token(SIBLING)) return true;
return false;
}
- private boolean jj_3R_240() {
+ private boolean jj_3R_249() {
if (jj_scan_token(PRECEDES)) return true;
return false;
}
- private boolean jj_3R_212() {
- if (jj_scan_token(EXS)) return true;
+ private boolean jj_3R_205() {
+ if (jj_scan_token(PT)) return true;
return false;
}
- private boolean jj_3R_239() {
+ private boolean jj_3R_248() {
if (jj_scan_token(PLUS)) return true;
return false;
}
- private boolean jj_3R_211() {
- if (jj_scan_token(EMS)) return true;
+ private boolean jj_3R_204() {
+ if (jj_scan_token(PERCENTAGE)) return true;
return false;
}
private boolean jj_3R_196() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_239()) {
+ if (jj_3R_248()) {
jj_scanpos = xsp;
- if (jj_3R_240()) {
+ if (jj_3R_249()) {
jj_scanpos = xsp;
- if (jj_3R_241()) return true;
+ if (jj_3R_250()) return true;
}
}
while (true) {
@@ -6297,12 +6327,17 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_210() {
- if (jj_scan_token(PX)) return true;
+ private boolean jj_3R_190() {
+ if (jj_3R_233()) return true;
return false;
}
- private boolean jj_3R_173() {
+ private boolean jj_3R_203() {
+ if (jj_scan_token(NUMBER)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_177() {
if (jj_scan_token(SIBLING)) return true;
Token xsp;
while (true) {
@@ -6312,7 +6347,12 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_172() {
+ private boolean jj_3R_202() {
+ if (jj_3R_254()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_176() {
if (jj_scan_token(PRECEDES)) return true;
Token xsp;
while (true) {
@@ -6322,12 +6362,7 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_209() {
- if (jj_scan_token(IN)) return true;
- return false;
- }
-
- private boolean jj_3R_174() {
+ private boolean jj_3R_178() {
if (jj_scan_token(S)) return true;
Token xsp;
xsp = jj_scanpos;
@@ -6338,20 +6373,20 @@ LexicalUnitImpl result = null;
private boolean jj_3R_160() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_171()) {
+ if (jj_3R_175()) {
jj_scanpos = xsp;
- if (jj_3R_172()) {
+ if (jj_3R_176()) {
jj_scanpos = xsp;
- if (jj_3R_173()) {
+ if (jj_3R_177()) {
jj_scanpos = xsp;
- if (jj_3R_174()) return true;
+ if (jj_3R_178()) return true;
}
}
}
return false;
}
- private boolean jj_3R_171() {
+ private boolean jj_3R_175() {
if (jj_scan_token(PLUS)) return true;
Token xsp;
while (true) {
@@ -6361,59 +6396,7 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_208() {
- if (jj_scan_token(PC)) return true;
- return false;
- }
-
- private boolean jj_3R_207() {
- if (jj_scan_token(MM)) return true;
- return false;
- }
-
- private boolean jj_3R_206() {
- if (jj_scan_token(CM)) return true;
- return false;
- }
-
- private boolean jj_3R_205() {
- if (jj_scan_token(PT)) return true;
- return false;
- }
-
- private boolean jj_3R_256() {
- if (jj_3R_258()) 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_271()) return true;
- return false;
- }
-
- private boolean jj_3R_204() {
- if (jj_scan_token(PERCENTAGE)) return true;
- return false;
- }
-
- private boolean jj_3R_186() {
- if (jj_3R_238()) return true;
- return false;
- }
-
- private boolean jj_3R_203() {
- if (jj_scan_token(NUMBER)) return true;
- return false;
- }
-
- private boolean jj_3R_202() {
- if (jj_3R_245()) return true;
- return false;
- }
-
- private boolean jj_3R_180() {
+ private boolean jj_3R_184() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_202()) jj_scanpos = xsp;
@@ -6479,9 +6462,9 @@ LexicalUnitImpl result = null;
private boolean jj_3R_163() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_180()) {
+ if (jj_3R_184()) {
jj_scanpos = xsp;
- if (jj_3R_181()) return true;
+ if (jj_3R_185()) return true;
}
while (true) {
xsp = jj_scanpos;
@@ -6490,83 +6473,102 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_248() {
- if (jj_scan_token(HASH)) return true;
- return false;
- }
-
- private boolean jj_3R_238() {
- if (jj_3R_258()) return true;
+ private boolean jj_3R_194() {
+ if (jj_3R_242()) 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_243()) return true;
+ xsp = jj_scanpos;
+ if (jj_3R_244()) jj_scanpos = xsp;
+ if (jj_3R_245()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_245()) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_198() {
+ private boolean jj_3R_257() {
if (jj_scan_token(HASH)) return true;
return false;
}
- private boolean jj_3R_305() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_233() {
+ if (jj_3R_242()) return true;
return false;
}
- private boolean jj_3R_185() {
+ private boolean jj_3R_189() {
if (jj_3R_163()) return true;
return false;
}
- private boolean jj_3R_249() {
- if (jj_scan_token(URL)) return true;
- return false;
- }
-
private boolean jj_3R_169() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_185()) {
+ if (jj_3R_189()) {
jj_scanpos = xsp;
- if (jj_3R_186()) return true;
+ if (jj_3R_190()) return true;
}
return false;
}
- private boolean jj_3R_306() {
- 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;}
+ private boolean jj_3R_258() {
+ if (jj_scan_token(URL)) return true;
return false;
}
private boolean jj_3R_168() {
- if (jj_3R_184()) return true;
+ if (jj_3R_188()) return true;
return false;
}
- private boolean jj_3R_261() {
+ private boolean jj_3R_198() {
+ if (jj_scan_token(HASH)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_327() {
+ if (jj_scan_token(IDENT)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_276() {
if (jj_scan_token(PLUS)) return true;
return false;
}
- private boolean jj_3R_245() {
+ private boolean jj_3R_254() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_260()) {
+ if (jj_3R_275()) {
jj_scanpos = xsp;
- if (jj_3R_261()) return true;
+ if (jj_3R_276()) return true;
}
return false;
}
- private boolean jj_3R_260() {
+ private boolean jj_3R_275() {
if (jj_scan_token(MINUS)) return true;
return false;
}
- private boolean jj_3_12() {
+ private boolean jj_3R_328() {
+ 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_3_11() {
Token xsp;
xsp = jj_scanpos;
if (jj_3R_168()) jj_scanpos = xsp;
@@ -6574,36 +6576,112 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_271() {
+ private boolean jj_3R_283() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_scan_token(99)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(10)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(96)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(22)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(14)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(98)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(114)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(100)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(94)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(18)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(12)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(95)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(41)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(72)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(97)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(76)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(70)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(110)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(74)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(23)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(20)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(24)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(25)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(21)) {
+ jj_scanpos = xsp;
+ if (jj_scan_token(115)) return true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_243() {
if (jj_3R_169()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3_12()) { jj_scanpos = xsp; break; }
+ if (jj_3_11()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_304() {
- if (jj_scan_token(COLON)) return true;
+ private boolean jj_3R_259() {
+ if (jj_scan_token(UNICODERANGE)) return true;
return false;
}
- private boolean jj_3R_250() {
- if (jj_scan_token(UNICODERANGE)) return true;
+ private boolean jj_3R_232() {
+ 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_200() {
+ private boolean jj_3R_326() {
if (jj_scan_token(COLON)) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_304()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_305()) {
- jj_scanpos = xsp;
- if (jj_3R_306()) return true;
- }
return false;
}
@@ -6628,8 +6706,18 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_237() {
- if (jj_scan_token(COMMA)) return true;
+ private boolean jj_3R_188() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_231()) {
+ jj_scanpos = xsp;
+ if (jj_3R_232()) return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3R_231() {
+ if (jj_scan_token(DIV)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
@@ -6638,23 +6726,36 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3_10() {
+ private boolean jj_3R_200() {
+ if (jj_scan_token(COLON)) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_326()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_327()) {
+ jj_scanpos = xsp;
+ if (jj_3R_328()) return true;
+ }
+ return false;
+ }
+
+ private boolean jj_3_9() {
if (jj_3R_166()) return true;
return false;
}
- private boolean jj_3R_184() {
+ private boolean jj_3R_271() {
+ if (jj_scan_token(GUARDED_SYM)) return true;
Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_236()) {
- jj_scanpos = xsp;
- if (jj_3R_237()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_236() {
- if (jj_scan_token(DIV)) return true;
+ private boolean jj_3R_339() {
+ if (jj_scan_token(IMPORTANT_SYM)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
@@ -6663,8 +6764,8 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_266() {
- if (jj_3R_284()) return true;
+ private boolean jj_3R_236() {
+ if (jj_3R_263()) return true;
return false;
}
@@ -6689,96 +6790,129 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3_9() {
+ private boolean jj_3_8() {
if (jj_3R_165()) return true;
return false;
}
- private boolean jj_3R_327() {
+ private boolean jj_3R_238() {
+ 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_308() {
+ if (jj_scan_token(COLON)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ return false;
+ }
+
+ private boolean jj_3R_281() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_308()) jj_scanpos = xsp;
+ if (jj_3R_169()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_270() {
+ if (jj_3R_283()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_165() {
+ 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; }
+ }
+ if (jj_scan_token(APPEND)) 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_351() {
if (jj_scan_token(STRING)) return true;
return false;
}
- private boolean jj_3R_325() {
+ private boolean jj_3R_349() {
if (jj_scan_token(STARMATCH)) return true;
return false;
}
- private boolean jj_3R_326() {
+ private boolean jj_3R_350() {
if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_324() {
+ private boolean jj_3R_348() {
if (jj_scan_token(DOLLARMATCH)) return true;
return false;
}
- private boolean jj_3R_268() {
- if (jj_scan_token(SEMICOLON)) return true;
- return false;
- }
-
- private boolean jj_3R_323() {
+ private boolean jj_3R_347() {
if (jj_scan_token(CARETMATCH)) return true;
return false;
}
- private boolean jj_3R_322() {
+ private boolean jj_3R_346() {
if (jj_scan_token(DASHMATCH)) return true;
return false;
}
- private boolean jj_3R_321() {
+ private boolean jj_3R_345() {
if (jj_scan_token(INCLUDES)) return true;
return false;
}
- private boolean jj_3R_276() {
+ private boolean jj_3R_289() {
if (jj_scan_token(INTERPOLATION)) return true;
return false;
}
- private boolean jj_3R_320() {
+ private boolean jj_3R_344() {
if (jj_scan_token(EQ)) return true;
return false;
}
- private boolean jj_3R_165() {
- 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; }
- }
- if (jj_scan_token(APPEND)) 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;}
+ private boolean jj_3R_269() {
+ if (jj_3R_167()) return true;
return false;
}
- private boolean jj_3R_311() {
+ private boolean jj_3R_333() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_320()) {
+ if (jj_3R_344()) {
jj_scanpos = xsp;
- if (jj_3R_321()) {
+ if (jj_3R_345()) {
jj_scanpos = xsp;
- if (jj_3R_322()) {
+ if (jj_3R_346()) {
jj_scanpos = xsp;
- if (jj_3R_323()) {
+ if (jj_3R_347()) {
jj_scanpos = xsp;
- if (jj_3R_324()) {
+ if (jj_3R_348()) {
jj_scanpos = xsp;
- if (jj_3R_325()) return true;
+ if (jj_3R_349()) return true;
}
}
}
@@ -6789,9 +6923,9 @@ LexicalUnitImpl result = null;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
xsp = jj_scanpos;
- if (jj_3R_326()) {
+ if (jj_3R_350()) {
jj_scanpos = xsp;
- if (jj_3R_327()) return true;
+ if (jj_3R_351()) return true;
}
while (true) {
xsp = jj_scanpos;
@@ -6800,6 +6934,35 @@ LexicalUnitImpl result = null;
return false;
}
+ private boolean jj_3R_340() {
+ if (jj_3R_262()) return true;
+ if (jj_scan_token(COLON)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_235() {
+ if (jj_3R_242()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_158() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3_7()) {
+ jj_scanpos = xsp;
+ if (jj_3_8()) {
+ jj_scanpos = xsp;
+ if (jj_3_9()) return true;
+ }
+ }
+ return false;
+ }
+
+ private boolean jj_3_7() {
+ if (jj_3R_164()) return true;
+ return false;
+ }
+
private boolean jj_3R_201() {
if (jj_scan_token(LBRACKET)) return true;
Token xsp;
@@ -6813,494 +6976,550 @@ LexicalUnitImpl result = null;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
xsp = jj_scanpos;
- if (jj_3R_311()) jj_scanpos = xsp;
+ if (jj_3R_333()) jj_scanpos = xsp;
if (jj_scan_token(RBRACKET)) return true;
return false;
}
- private boolean jj_3R_235() {
- if (jj_3R_257()) return true;
+ private boolean jj_3R_341() {
+ if (jj_3R_340()) return true;
return false;
}
- private boolean jj_3R_288() {
- if (jj_scan_token(COMMA)) return true;
+ private boolean jj_3R_343() {
+ if (jj_scan_token(INTERPOLATION)) return true;
return false;
}
- private boolean jj_3R_287() {
- if (jj_scan_token(IDENT)) return true;
+ private boolean jj_3R_267() {
+ 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_266()) return true;
return false;
}
- private boolean jj_3R_319() {
+ private boolean jj_3R_263() {
if (jj_scan_token(INTERPOLATION)) return true;
return false;
}
- private boolean jj_3R_265() {
- if (jj_3R_258()) return true;
+ private boolean jj_3R_266() {
+ if (jj_scan_token(IDENT)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_244() {
+ private boolean jj_3R_237() {
+ if (jj_3R_264()) return true;
+ if (jj_3R_265()) return true;
+ if (jj_scan_token(RPARAN)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_253() {
if (jj_scan_token(PARENT)) return true;
return false;
}
- private boolean jj_3R_158() {
+ private boolean jj_3R_252() {
+ if (jj_scan_token(ANY)) return true;
+ return false;
+ }
+
+ private boolean jj_3R_234() {
+ if (jj_3R_262()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_240() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3_8()) {
+ if (jj_3R_268()) {
jj_scanpos = xsp;
- if (jj_3_9()) {
+ if (jj_3R_269()) {
jj_scanpos = xsp;
- if (jj_3_10()) return true;
+ if (jj_3R_270()) return true;
}
}
return false;
}
- private boolean jj_3_8() {
- if (jj_3R_164()) return true;
+ private boolean jj_3R_268() {
+ if (jj_3R_272()) return true;
return false;
}
- private boolean jj_3R_243() {
- if (jj_scan_token(ANY)) return true;
+ private boolean jj_3R_191() {
+ if (jj_scan_token(INCLUDE_SYM)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_234()) {
+ jj_scanpos = xsp;
+ if (jj_3R_235()) {
+ jj_scanpos = xsp;
+ if (jj_3R_236()) {
+ jj_scanpos = xsp;
+ if (jj_3R_237()) return true;
+ }
+ }
+ }
+ if (jj_3R_238()) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_238()) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_269() {
- if (jj_3R_287()) return true;
+ private boolean jj_3R_239() {
+ if (jj_3R_266()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_288()) { jj_scanpos = xsp; break; }
+ if (jj_3R_267()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_259() {
+ private boolean jj_3R_274() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_275()) {
+ if (jj_3R_288()) {
jj_scanpos = xsp;
- if (jj_3R_276()) return true;
+ if (jj_3R_289()) return true;
}
return false;
}
- private boolean jj_3R_275() {
+ private boolean jj_3R_288() {
if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_284() {
- if (jj_scan_token(INTERPOLATION)) return true;
+ private boolean jj_3R_313() {
+ if (jj_scan_token(SEMICOLON)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ xsp = jj_scanpos;
+ if (jj_3R_341()) jj_scanpos = xsp;
return false;
}
private boolean jj_3R_197() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_242()) {
+ if (jj_3R_251()) {
jj_scanpos = xsp;
- if (jj_3R_243()) {
+ if (jj_3R_252()) {
jj_scanpos = xsp;
- if (jj_3R_244()) return true;
+ if (jj_3R_253()) return true;
}
}
return false;
}
- private boolean jj_3R_242() {
+ private boolean jj_3R_251() {
Token xsp;
- if (jj_3R_259()) return true;
+ if (jj_3R_274()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_259()) { jj_scanpos = xsp; break; }
+ if (jj_3R_274()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_267() {
- if (jj_3R_285()) return true;
- if (jj_3R_286()) return true;
+ private boolean jj_3R_282() {
+ 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_169()) return true;
return false;
}
- private boolean jj_3R_264() {
- if (jj_3R_283()) return true;
+ private boolean jj_3R_337() {
+ if (jj_3R_200()) return true;
return false;
}
- private boolean jj_3R_252() {
- if (jj_scan_token(INCLUDE_SYM)) return true;
+ private boolean jj_3R_265() {
+ if (jj_3R_169()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- xsp = jj_scanpos;
- if (jj_3R_264()) {
- jj_scanpos = xsp;
- if (jj_3R_265()) {
- jj_scanpos = xsp;
- if (jj_3R_266()) {
- jj_scanpos = xsp;
- if (jj_3R_267()) return true;
- }
- }
+ if (jj_3R_281()) { jj_scanpos = xsp; break; }
}
- if (jj_3R_268()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_268()) { jj_scanpos = xsp; break; }
+ if (jj_3R_282()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_315() {
- if (jj_3R_200()) return true;
+ private boolean jj_3R_162() {
+ 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_318() {
+ private boolean jj_3R_342() {
if (jj_scan_token(IDENT)) return true;
return false;
}
- private boolean jj_3R_299() {
+ private boolean jj_3R_321() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_318()) {
+ if (jj_3R_342()) {
jj_scanpos = xsp;
- if (jj_3R_319()) return true;
+ if (jj_3R_343()) return true;
}
return false;
}
- private boolean jj_3R_313() {
+ private boolean jj_3R_335() {
if (jj_3R_199()) return true;
return false;
}
- private boolean jj_3_3() {
- if (jj_3R_159()) return true;
- return false;
- }
-
- private boolean jj_3R_310() {
+ private boolean jj_3R_332() {
if (jj_3R_200()) return true;
return false;
}
- private boolean jj_3R_308() {
+ private boolean jj_3R_330() {
if (jj_3R_199()) return true;
return false;
}
- private boolean jj_3R_298() {
+ private boolean jj_3R_320() {
if (jj_3R_200()) return true;
return false;
}
- private boolean jj_3R_253() {
- if (jj_scan_token(MEDIA_SYM)) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- if (jj_3R_269()) return true;
- if (jj_scan_token(LBRACE)) return true;
+ private boolean jj_3R_312() {
+ if (jj_3R_340()) return true;
return false;
}
private boolean jj_3R_199() {
if (jj_scan_token(DOT)) return true;
Token xsp;
- if (jj_3R_299()) return true;
+ if (jj_3R_321()) return true;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_299()) { jj_scanpos = xsp; break; }
+ if (jj_3R_321()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_303() {
+ private boolean jj_3R_325() {
if (jj_3R_200()) return true;
return false;
}
- private boolean jj_3R_301() {
+ private boolean jj_3R_323() {
if (jj_3R_199()) return true;
return false;
}
- private boolean jj_3R_286() {
- if (jj_3R_169()) return true;
+ private boolean jj_3R_192() {
+ if (jj_scan_token(MEDIA_SYM)) return true;
+ Token xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ if (jj_3R_239()) return true;
+ if (jj_scan_token(LBRACE)) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_240()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(RBRACE)) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_162() {
- if (jj_scan_token(COMMA)) return true;
+ private boolean jj_3R_287() {
+ if (jj_scan_token(LBRACE)) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
}
+ xsp = jj_scanpos;
+ if (jj_3R_312()) jj_scanpos = xsp;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_3R_313()) { jj_scanpos = xsp; break; }
+ }
+ if (jj_scan_token(RBRACE)) return true;
+ while (true) {
+ xsp = jj_scanpos;
+ if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
+ }
return false;
}
- private boolean jj_3R_234() {
- if (jj_3R_256()) return true;
+ private boolean jj_3_6() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_162()) jj_scanpos = xsp;
+ if (jj_3R_163()) return true;
return false;
}
- private boolean jj_3R_314() {
+ private boolean jj_3R_311() {
+ if (jj_3R_339()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_247() {
+ if (jj_3R_273()) return true;
+ return false;
+ }
+
+ private boolean jj_3R_336() {
if (jj_3R_201()) return true;
return false;
}
- private boolean jj_3R_312() {
+ private boolean jj_3R_334() {
if (jj_3R_198()) return true;
return false;
}
- private boolean jj_3R_281() {
+ private boolean jj_3R_294() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_312()) {
+ if (jj_3R_334()) {
jj_scanpos = xsp;
- if (jj_3R_313()) {
+ if (jj_3R_335()) {
jj_scanpos = xsp;
- if (jj_3R_314()) {
+ if (jj_3R_336()) {
jj_scanpos = xsp;
- if (jj_3R_315()) return true;
+ if (jj_3R_337()) return true;
}
}
}
return false;
}
- private boolean jj_3R_274() {
- if (jj_3R_291()) return true;
- return false;
- }
-
- private boolean jj_3R_307() {
+ private boolean jj_3R_329() {
if (jj_3R_198()) return true;
return false;
}
- private boolean jj_3R_280() {
+ private boolean jj_3R_293() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_307()) {
+ if (jj_3R_329()) {
jj_scanpos = xsp;
- if (jj_3R_308()) {
+ if (jj_3R_330()) {
jj_scanpos = xsp;
- if (jj_3R_309()) {
+ if (jj_3R_331()) {
jj_scanpos = xsp;
- if (jj_3R_310()) return true;
+ if (jj_3R_332()) return true;
}
}
}
return false;
}
- private boolean jj_3R_295() {
+ private boolean jj_3R_317() {
if (jj_3R_200()) return true;
return false;
}
- private boolean jj_3_7() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_162()) jj_scanpos = xsp;
- if (jj_3R_163()) return true;
- return false;
- }
-
- private boolean jj_3R_309() {
+ private boolean jj_3R_331() {
if (jj_3R_201()) return true;
return false;
}
- private boolean jj_3R_300() {
+ private boolean jj_3R_322() {
if (jj_3R_198()) return true;
return false;
}
- private boolean jj_3R_279() {
+ private boolean jj_3R_292() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_300()) {
+ if (jj_3R_322()) {
jj_scanpos = xsp;
- if (jj_3R_301()) {
+ if (jj_3R_323()) {
jj_scanpos = xsp;
- if (jj_3R_302()) {
+ if (jj_3R_324()) {
jj_scanpos = xsp;
- if (jj_3R_303()) return true;
+ if (jj_3R_325()) return true;
}
}
}
return false;
}
- private boolean jj_3R_297() {
+ private boolean jj_3R_319() {
if (jj_3R_201()) return true;
return false;
}
- private boolean jj_3R_302() {
- if (jj_3R_201()) return true;
+ private boolean jj_3R_286() {
+ if (jj_3R_243()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_311()) jj_scanpos = xsp;
return false;
}
- private boolean jj_3R_317() {
- if (jj_scan_token(LBRACE)) return true;
+ private boolean jj_3R_324() {
+ if (jj_3R_201()) return true;
return false;
}
- private boolean jj_3R_296() {
+ private boolean jj_3R_318() {
if (jj_3R_199()) return true;
return false;
}
- private boolean jj_3R_293() {
+ private boolean jj_3R_315() {
if (jj_3R_199()) return true;
return false;
}
- private boolean jj_3R_278() {
+ private boolean jj_3R_291() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_296()) {
+ if (jj_3R_318()) {
jj_scanpos = xsp;
- if (jj_3R_297()) {
+ if (jj_3R_319()) {
jj_scanpos = xsp;
- if (jj_3R_298()) return true;
+ if (jj_3R_320()) return true;
}
}
return false;
}
- private boolean jj_3R_233() {
- if (jj_3R_255()) return true;
+ private boolean jj_3R_273() {
+ if (jj_3R_262()) 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_286()) {
+ jj_scanpos = xsp;
+ if (jj_3R_287()) return true;
+ }
return false;
}
- private boolean jj_3R_273() {
- if (jj_3R_290()) return true;
+ private boolean jj_3R_246() {
+ if (jj_3R_272()) return true;
return false;
}
- private boolean jj_3R_179() {
+ private boolean jj_3R_183() {
if (jj_3R_201()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_281()) { jj_scanpos = xsp; break; }
+ if (jj_3R_294()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_178() {
+ private boolean jj_3R_182() {
if (jj_3R_200()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_280()) { jj_scanpos = xsp; break; }
+ if (jj_3R_293()) { jj_scanpos = xsp; break; }
}
return false;
}
private boolean jj_3R_316() {
- if (jj_3R_271()) return true;
- return false;
- }
-
- private boolean jj_3R_294() {
if (jj_3R_201()) return true;
return false;
}
- private boolean jj_3R_177() {
+ private boolean jj_3R_181() {
if (jj_3R_199()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_279()) { jj_scanpos = xsp; break; }
+ if (jj_3R_292()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_292() {
+ private boolean jj_3R_314() {
if (jj_3R_198()) return true;
return false;
}
- private boolean jj_3R_176() {
- if (jj_3R_198()) return true;
- Token xsp;
- while (true) {
- xsp = jj_scanpos;
- if (jj_3R_278()) { jj_scanpos = xsp; break; }
- }
- return false;
- }
-
- private boolean jj_3R_277() {
+ private boolean jj_3R_290() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_292()) {
+ if (jj_3R_314()) {
jj_scanpos = xsp;
- if (jj_3R_293()) {
+ if (jj_3R_315()) {
jj_scanpos = xsp;
- if (jj_3R_294()) {
+ if (jj_3R_316()) {
jj_scanpos = xsp;
- if (jj_3R_295()) return true;
+ if (jj_3R_317()) return true;
}
}
}
return false;
}
- private boolean jj_3_6() {
- if (jj_3R_158()) return true;
- return false;
- }
-
- private boolean jj_3R_175() {
- if (jj_3R_197()) return true;
+ private boolean jj_3R_180() {
+ if (jj_3R_198()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_3R_277()) { jj_scanpos = xsp; break; }
+ if (jj_3R_291()) { jj_scanpos = xsp; break; }
}
return false;
}
- private boolean jj_3R_291() {
- if (jj_3R_283()) return true;
- if (jj_scan_token(COLON)) return true;
+ private boolean jj_3R_179() {
+ if (jj_3R_197()) return true;
Token xsp;
while (true) {
xsp = jj_scanpos;
- if (jj_scan_token(1)) { jj_scanpos = xsp; break; }
- }
- xsp = jj_scanpos;
- if (jj_3R_316()) {
- jj_scanpos = xsp;
- if (jj_3R_317()) return true;
+ if (jj_3R_290()) { jj_scanpos = xsp; break; }
}
return false;
}
@@ -7308,15 +7527,15 @@ LexicalUnitImpl result = null;
private boolean jj_3R_161() {
Token xsp;
xsp = jj_scanpos;
- if (jj_3R_175()) {
+ if (jj_3R_179()) {
jj_scanpos = xsp;
- if (jj_3R_176()) {
+ if (jj_3R_180()) {
jj_scanpos = xsp;
- if (jj_3R_177()) {
+ if (jj_3R_181()) {
jj_scanpos = xsp;
- if (jj_3R_178()) {
+ if (jj_3R_182()) {
jj_scanpos = xsp;
- if (jj_3R_179()) return true;
+ if (jj_3R_183()) return true;
}
}
}
@@ -7324,16 +7543,6 @@ LexicalUnitImpl result = null;
return false;
}
- private boolean jj_3R_232() {
- if (jj_3R_254()) return true;
- return false;
- }
-
- private boolean jj_3R_272() {
- if (jj_3R_289()) return true;
- return false;
- }
-
/** Generated Token Manager. */
public ParserTokenManager token_source;
/** Current token. */
@@ -7344,7 +7553,7 @@ LexicalUnitImpl result = null;
private Token jj_scanpos, jj_lastpos;
private int jj_la;
private int jj_gen;
- final private int[] jj_la1 = new int[234];
+ final private int[] jj_la1 = new int[229];
static private int[] jj_la1_0;
static private int[] jj_la1_1;
static private int[] jj_la1_2;
@@ -7356,18 +7565,18 @@ LexicalUnitImpl result = null;
jj_la1_init_3();
}
private static void jj_la1_init_0() {
- jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0x0,0xd0000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xd3f45400,0xd3f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x3f45400,0x2,0x2,0x2,0x3100000,0x2,0x3100000,0x3100002,0x2,0x80002,0x80002,0x2,0x2,0x2,0x2,0x2,0xd0000000,0x0,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0xd0000000,0x0,0x0,0x0,0x0,0xc0000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0x0,0x2,0x0,0x2,0x800000,0x4d380002,0x2,0xd0000000,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0xd0000000,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x300000,0x2,0x0,0x400000,0x2,0x300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x301000,0x2,0x0,0x2,0x2,0x2,0x2,0x8400000,0x8400000,0x300000,0x300000,0x300000,0x0,0x0,0x0,0x300000,0x2,0x2,0x300000,0x2,0xd0000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
+ jj_la1_0 = new int[] {0x0,0xc02,0xc02,0x0,0xc00,0x2,0x2,0x2,0xd0000000,0xc00,0x2,0xc00,0x2,0x0,0x2,0x0,0x2,0x2,0x2,0xd3f45400,0xd3f45400,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x3f45400,0x2,0x2,0x2,0x3100000,0x2,0x3100000,0x3100002,0x2,0x480002,0x480002,0x2,0x2,0x2,0x2,0x2,0xd0000000,0x0,0x2,0x400000,0x2,0x2,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000,0xd0000000,0x0,0x0,0x0,0x0,0xc0000000,0x2,0x2,0xfc000,0x2,0x0,0x2,0xfc000,0x0,0x2,0x0,0x2,0x0,0x2,0x800000,0x0,0xd0000000,0x4d380002,0x2,0xd0000000,0x2,0x0,0x2,0x4d380002,0x0,0x2,0xd0000000,0x2,0x4d380002,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x0,0x2,0xd0000000,0x0,0x2,0x400000,0x2,0x2,0x2,0x400000,0x0,0x0,0x300000,0x2,0x0,0x400000,0x2,0x300000,0x2,0x0,0x2,0x0,0x2,0x800000,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x2,0x2,0x2,0x0,0x2,0x2,0x2,0x400000,0x2,0x2,0x0,0x2,0x2,0x0,0x2,0x2,0x2,0x800000,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,0x0,0x2,0x0,0x2,0x0,0x800000,0x2,0x0,0x2,0x301000,0x2,0x0,0x2,0x2,0x2,0x2,0x8400000,0x8400000,0x300000,0x300000,0x300000,0x0,0x0,0x0,0x300000,0x2,0x2,0x300000,0x2,0xd0000000,0x2,0x2,0x2,0x0,0x800000,0x2,0x0,0x2,};
}
private static void jj_la1_init_1() {
- jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56600181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000381,0x6000381,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x0,0x0,0x0,0x0,0x56400181,0x40000000,0x10400000,0x6000181,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x181,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x7e,0x0,0x6400181,0x6400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x6400181,0x6400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x6400181,0x400000,0x6000181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56400181,0x400000,0x56000181,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x81,0x0,0x80,0x0,0x0,0x81,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x6000181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+ jj_la1_1 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56600181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000381,0x6000381,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x185,0x185,0x0,0x0,0x0,0x0,0x0,0x56400181,0x50000000,0x0,0x0,0x0,0x0,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x181,0x100,0x100,0x100,0x100,0x100,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x50000000,0x6400181,0x7e,0x0,0x6400181,0x0,0x80000000,0x0,0x7e,0x0,0x0,0x6400181,0x0,0x7e,0x0,0x0,0x0,0x0,0x0,0x6400181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x56400181,0x50000000,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x80,0x81,0x0,0x80,0x0,0x0,0x81,0x0,0x80,0x0,0x100,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0xc0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x1,0x1,0x0,0x0,0x1,0x0,0x6000181,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
}
private static void jj_la1_init_2() {
- jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0x800,0xa0000880,0x0,0x0,0x0,0x0,0x440,0x0,0x80,0x0,0x0,0x0,0xe00015c0,0xe00015c0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0xc0001540,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180,0x180,0x0,0x0,0x0,0x0,0x0,0xa0000889,0x0,0x80000801,0x20000080,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000080,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x0,0x0,0x980,0x0,0xa0000881,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x80000000,0x20000881,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x3ffffdc0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x0,0x0,0x880,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,0x80,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x3ffffdc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x1ffff100,0x0,0x200004c0,0x3ffff5c0,0x0,0x0,0x3ffffdc0,0x0,0xe0000080,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
+ jj_la1_2 = new int[] {0x0,0x0,0x0,0x40000000,0x0,0x0,0x0,0x0,0xa0000880,0x0,0x0,0x0,0x0,0x440,0x0,0x80,0x0,0x0,0x0,0xe00015c0,0xe00015c0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0xc0001540,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1c0,0x1c0,0x0,0x0,0x0,0x0,0x0,0xa0000889,0x8,0x0,0x0,0x0,0x0,0x20000000,0x20000000,0x0,0x0,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000,0x20000080,0x80,0x80,0x80,0x80,0x80,0x0,0x0,0x0,0x0,0xc0,0x0,0x0,0x0,0x0,0x80,0x0,0x20,0x0,0x0,0x0,0xa0000881,0x980,0x0,0xa0000881,0x0,0x0,0x0,0x980,0x10,0x0,0xa0000881,0x0,0x980,0x0,0x0,0x0,0x880,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x80,0x0,0xa0000881,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x800,0x800,0x3ffffdc0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x0,0x0,0x880,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,0x80,0x0,0x0,0x80,0x0,0x80,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,0x3ffffdc0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3ffffdc0,0x0,0x1ffff100,0x0,0x200004c0,0x3ffff5c0,0x0,0x0,0x3ffffdc0,0x0,0xe0000080,0x0,0x0,0x0,0x80,0x0,0x0,0x80,0x0,};
}
private static void jj_la1_init_3() {
- jj_la1_3 = new int[] {0x1,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x6,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,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,0x40000,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,0x40000,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x40000,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,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x40000,0x0,0x4000,0x44000,0x0,0x0,0x44000,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+ jj_la1_3 = new int[] {0x1,0x8,0x8,0x0,0x8,0x0,0x0,0x0,0x6,0x8,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc401f,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x40000,0x40000,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,0x40000,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,0x40000,0x0,0x6,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x0,0x44000,0x0,0x0,0x0,0x40000,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,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44000,0x0,0x40000,0x0,0x4000,0x44000,0x0,0x0,0x44000,0x0,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
}
- final private JJCalls[] jj_2_rtns = new JJCalls[12];
+ final private JJCalls[] jj_2_rtns = new JJCalls[11];
private boolean jj_rescan = false;
private int jj_gc = 0;
@@ -7377,7 +7586,7 @@ LexicalUnitImpl result = null;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 234; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 229; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -7387,7 +7596,7 @@ LexicalUnitImpl result = null;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 234; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 229; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -7397,7 +7606,7 @@ LexicalUnitImpl result = null;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 234; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 229; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -7407,7 +7616,7 @@ LexicalUnitImpl result = null;
token = new Token();
jj_ntk = -1;
jj_gen = 0;
- for (int i = 0; i < 234; i++) jj_la1[i] = -1;
+ for (int i = 0; i < 229; i++) jj_la1[i] = -1;
for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
}
@@ -7524,7 +7733,7 @@ LexicalUnitImpl result = null;
la1tokens[jj_kind] = true;
jj_kind = -1;
}
- for (int i = 0; i < 234; i++) {
+ for (int i = 0; i < 229; i++) {
if (jj_la1[i] == jj_gen) {
for (int j = 0; j < 32; j++) {
if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -7569,7 +7778,7 @@ LexicalUnitImpl result = null;
private void jj_rescan_token() {
jj_rescan = true;
- for (int i = 0; i < 12; i++) {
+ for (int i = 0; i < 11; i++) {
try {
JJCalls p = jj_2_rtns[i];
do {
@@ -7587,7 +7796,6 @@ LexicalUnitImpl result = null;
case 8: jj_3_9(); break;
case 9: jj_3_10(); break;
case 10: jj_3_11(); break;
- case 11: jj_3_12(); break;
}
}
p = p.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
index efd1ce2857..8d7cc4c32d 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
+++ b/theme-compiler/src/com/vaadin/sass/internal/parser/Parser.jj
@@ -743,7 +743,7 @@ void afterImportDeclaration() :
}
{
(
- ( (LOOKAHEAD(5)listModifyDirective()|variable()) | debugDirective() | warnDirective() | ifDirective()|mixinDirective()| eachDirective() | includeDirective() | styleRule() | media()| page() | fontFace()
+ ( LOOKAHEAD(5)listModifyDirective() | variable() | debuggingDirective() | mixinDirective() | controlDirective() | includeDirective() | styleRule() | media() | page() | fontFace()
| { l = getLocator(); } ret=skipStatement()
{
if ((ret == null) || (ret.length() == 0)) {
@@ -821,7 +821,7 @@ void media() :
<MEDIA_SYM> ( <S> )*
mediaStatement(ml)
{ start = true; documentHandler.startMedia(ml); }
- <LBRACE> ( <S> )* ( debugDirective() | warnDirective() | styleRule() | skipUnknownRule() )* <RBRACE> ( <S> )*
+ <LBRACE> ( <S> )* ( debuggingDirective() | styleRule() | skipUnknownRule() )* <RBRACE> ( <S> )*
} catch (ParseException e) {
reportError(getLocator(), e);
skipStatement();
@@ -1007,10 +1007,13 @@ void microsoftExtension() :
}
{
+ // 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; })
@@ -1063,7 +1066,7 @@ void styleRule() :
start = true;
documentHandler.startSelector(l);
}
- ( ifDirective() | LOOKAHEAD(5)listModifyDirective() | includeDirective() | media() | extendDirective()| eachDirective() | variable() | LOOKAHEAD(3) microsoftExtension()| styleRuleOrDeclarationOrNestedProperties())*
+ ( LOOKAHEAD(5)ifContentStatement() | controlDirective() | microsoftExtension() )*
<RBRACE> (<S>)*
} catch (ThrowedParseException e) {
if (errorHandler != null) {
@@ -1392,6 +1395,18 @@ void variable() :
}
}
+void controlDirective() :
+{}
+{
+ ifDirective() | eachDirective()
+}
+
+void ifContentStatement() :
+{}
+{
+ LOOKAHEAD(5)listModifyDirective() | includeDirective() | media() | extendDirective() | variable() | styleRuleOrDeclarationOrNestedProperties()
+}
+
void ifDirective() :
{
Token n = null;
@@ -1404,7 +1419,7 @@ void ifDirective() :
{ documentHandler.startIfElseDirective();
documentHandler.ifDirective(evaluator);
}
- ( includeDirective() | media() | extendDirective()| variable() | styleRuleOrDeclarationOrNestedProperties())*
+ ( ifContentStatement() )*
< RBRACE >(< S >)*
(elseDirective())*
{ documentHandler.endIfElseDirective(); }
@@ -1417,12 +1432,12 @@ void elseDirective() :
}
{
< ELSE_SYM >(< S >)*
- ( < IF > (n = booleanExpressionToken() { if(n != null) evaluator += n.image; })*)?
+ ( < IF > ( n = booleanExpressionToken() { evaluator += n.image; } )+ )?
< LBRACE >(< S >)*
{ if(!evaluator.trim().equals("")){ documentHandler.ifDirective(evaluator); }
else{ documentHandler.elseDirective(); }
}
- ( includeDirective() | media() | extendDirective()| variable() | styleRuleOrDeclarationOrNestedProperties())*
+ ( ifContentStatement() )*
< RBRACE >(< S >)*
}
@@ -1470,7 +1485,7 @@ void eachDirective() :
{documentHandler.startEachDirective(var.image, listVariable);}
)
< LBRACE >(< S >)*
- ( includeDirective() | LOOKAHEAD(5)listModifyDirective() | media() | extendDirective()| variable() | styleRuleOrDeclarationOrNestedProperties())*
+ ( ifContentStatement() )*
< RBRACE >(< S >)*
{ documentHandler.endEachDirective();}
}
@@ -1502,7 +1517,7 @@ void mixinDirective() :
|(name = functionName()
args = arglist()) <RPARAN> (<S>)*) <LBRACE> (<S>)*
{documentHandler.startMixinDirective(name, args);}
- ( includeDirective() | media() | LOOKAHEAD(5)listModifyDirective() | ifDirective() | eachDirective() | extendDirective()| variable() | styleRuleOrDeclarationOrNestedProperties() | fontFace() | page())*
+ ( LOOKAHEAD(5)ifContentStatement() | controlDirective() | fontFace() | page())*
<RBRACE>(<S>)*
{documentHandler.endMixinDirective(name, args);}
}
@@ -1720,6 +1735,12 @@ Node returnDirective() :
{return null;}
}
+void debuggingDirective() :
+{}
+{
+ debugDirective() | warnDirective()
+}
+
void debugDirective() :
{}
{
@@ -1835,7 +1856,7 @@ void styleRuleOrDeclarationOrNestedProperties() :
{
try {
// differentiate between the colon of a pseudo and the colon of nested properties and the colon of a simple property
- (LOOKAHEAD(5) styleRule() | debugDirective() | warnDirective() | declarationOrNestedProperties())
+ (LOOKAHEAD(5) styleRule() | debuggingDirective() | declarationOrNestedProperties())
} catch (JumpException e) {
skipAfterExpression();
// reportWarningSkipText(getLocator(), skipAfterExpression());
@@ -2705,8 +2726,7 @@ void _parseRule() :
}
{
( <S> )*
- ( importDeclaration() | debugDirective() | warnDirective() | styleRule() | media() | page()
- | fontFace() | ret=skipStatement()
+ ( importDeclaration() | debuggingDirective() | styleRule() | media() | page() | fontFace() | ret=skipStatement()
{
if ((ret == null) || (ret.length() == 0)) {
return;
diff --git a/theme-compiler/src/com/vaadin/sass/internal/visitor/ImportNodeHandler.java b/theme-compiler/src/com/vaadin/sass/internal/visitor/ImportNodeHandler.java
index 1ba1072767..67e6df6383 100644
--- a/theme-compiler/src/com/vaadin/sass/internal/visitor/ImportNodeHandler.java
+++ b/theme-compiler/src/com/vaadin/sass/internal/visitor/ImportNodeHandler.java
@@ -100,7 +100,9 @@ public class ImportNodeHandler {
LexicalUnit value = ((RuleNode) child).getValue();
while (value != null) {
if (value.getLexicalUnitType() == LexicalUnit.SAC_URI) {
- String path = value.getStringValue();
+ String path = value.getStringValue()
+ .replaceAll("^\"|\"$", "")
+ .replaceAll("^'|'$", "");
if (!path.startsWith("/") && !path.contains(":")) {
path = prefix + path;
path = StringUtil.cleanPath(path);
diff --git a/theme-compiler/tests/resources/automatic/css/microsoft-extensions.css b/theme-compiler/tests/resources/automatic/css/microsoft-extensions.css
index 18bc34ca6c..af614316c9 100644
--- a/theme-compiler/tests/resources/automatic/css/microsoft-extensions.css
+++ b/theme-compiler/tests/resources/automatic/css/microsoft-extensions.css
@@ -1,6 +1,7 @@
.v-ie6 .v-shadow-window {
background: #000000;
filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=5 ) alpha(opacity = 20);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed');
margin-top: 2px;
margin-left: 2px;
} \ No newline at end of file
diff --git a/theme-compiler/tests/resources/automatic/css/url-path.css b/theme-compiler/tests/resources/automatic/css/url-path.css
new file mode 100644
index 0000000000..1045948ac8
--- /dev/null
+++ b/theme-compiler/tests/resources/automatic/css/url-path.css
@@ -0,0 +1,5 @@
+.bar {
+ background: url(foo/lorem.png);
+ background: url(foo/lorem.png);
+ background: url(foo/lorem.png);
+} \ No newline at end of file
diff --git a/theme-compiler/tests/resources/automatic/scss/foo/bar.scss b/theme-compiler/tests/resources/automatic/scss/foo/bar.scss
new file mode 100644
index 0000000000..326d34232d
--- /dev/null
+++ b/theme-compiler/tests/resources/automatic/scss/foo/bar.scss
@@ -0,0 +1,5 @@
+.bar {
+ background: url("lorem.png");
+ background: url('lorem.png');
+ background: url(lorem.png);
+} \ No newline at end of file
diff --git a/theme-compiler/tests/resources/automatic/scss/microsoft-extensions.scss b/theme-compiler/tests/resources/automatic/scss/microsoft-extensions.scss
index 69670969de..e08f3f07a3 100644
--- a/theme-compiler/tests/resources/automatic/scss/microsoft-extensions.scss
+++ b/theme-compiler/tests/resources/automatic/scss/microsoft-extensions.scss
@@ -1,6 +1,7 @@
.v-ie6 .v-shadow-window {
background: #000000;
filter: progid:DXImageTransform.Microsoft.Blur(pixelRadius=5 ) alpha(opacity = 20);
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#ededed');
margin-top: 2px;
margin-left: 2px;
}
diff --git a/theme-compiler/tests/resources/automatic/scss/url-path.scss b/theme-compiler/tests/resources/automatic/scss/url-path.scss
new file mode 100644
index 0000000000..0cc954bfb4
--- /dev/null
+++ b/theme-compiler/tests/resources/automatic/scss/url-path.scss
@@ -0,0 +1 @@
+@import "foo/bar.scss"; \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/components/TooltipsOnScrollingWindow.html b/uitest/src/com/vaadin/tests/components/TooltipsOnScrollingWindow.html
new file mode 100644
index 0000000000..b251cdf03b
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/TooltipsOnScrollingWindow.html
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8888/" />
+<title>TooltipsOnScrollingWindow</title>
+</head>
+<body>
+ <table cellpadding="1" cellspacing="1" border="1">
+ <thead>
+ <tr>
+ <td rowspan="1" colspan="3">TooltipsOnScrollingWindow</td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.TooltipsOnScrollingWindow?restartApplication</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>showTooltip</td>
+ <td>vaadin=runcomvaadintestscomponentsTooltipsOnScrollingWindow::PID_Shoverable-label</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>waitForVisible</td>
+ <td>vaadin=runcomvaadintestscomponentsTooltipsOnScrollingWindow::Root/VTooltip[0]/FlowPanel[0]/domChild[1]</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tooltip-is-positioned-correctly</td>
+ </tr>
+ </tbody>
+ </table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/TooltipsOnScrollingWindow.java b/uitest/src/com/vaadin/tests/components/TooltipsOnScrollingWindow.java
new file mode 100644
index 0000000000..a38f9c274e
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/TooltipsOnScrollingWindow.java
@@ -0,0 +1,55 @@
+package com.vaadin.tests.components;
+
+import com.vaadin.tests.util.TestUtils;
+import com.vaadin.ui.CssLayout;
+import com.vaadin.ui.Label;
+
+public class TooltipsOnScrollingWindow extends TestBase {
+
+ @Override
+ protected void setup() {
+
+ TestUtils
+ .injectCSS(
+ getMainWindow(),
+ ".v-generated-body { overflow: auto; } "
+ + ".v-app, .v-ui { overflow: visible !important;}"
+ + ".hoverable-label { position: fixed; bottom: 10px; right: 10px; }"
+ + ".hidden-label { position: absolute; top: 2000px; left: 2000px;}");
+
+ getLayout().getParent().setHeight("4000px");
+ getLayout().getParent().setWidth("4000px");
+ getLayout().setHeight("4000px");
+ getLayout().setWidth("4000px");
+
+ CssLayout layout = new CssLayout();
+ layout.setHeight("4000px");
+ layout.setWidth("4000px");
+ addComponent(layout);
+
+ Label hoverableLabel = new Label("Hover me");
+ hoverableLabel.setId("hoverable-label");
+ hoverableLabel.setStyleName("hoverable-label");
+ hoverableLabel.setWidth("-1px");
+ hoverableLabel.setDescription("Tooltip");
+ layout.addComponent(hoverableLabel);
+
+ Label hiddenLabel = new Label("Hidden");
+ hiddenLabel.setStyleName("hidden-label");
+ hiddenLabel.setWidth("-1px");
+ layout.addComponent(hiddenLabel);
+
+ getMainWindow().scrollIntoView(hiddenLabel);
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Tooltip is displayed in the wrong place when component is at lower edge of the screen and application with following the css is scrolled vertically.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 9862;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/button/ButtonWithShortcutNotRendered.html b/uitest/src/com/vaadin/tests/components/button/ButtonWithShortcutNotRendered.html
new file mode 100644
index 0000000000..a4e36b6f44
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/button/ButtonWithShortcutNotRendered.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:9999/" />
+<title>ButtonWithShortcutNotRendered</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ButtonWithShortcutNotRendered</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.button.ButtonWithShortcutNotRendered?restartApplication</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runcomvaadintestscomponentsbuttonButtonWithShortcutNotRendered::/VVerticalLayout[0]/Slot[1]/VVerticalLayout[0]/Slot[0]/VSplitPanelVertical[0]/VScrollTable[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[1]/domChild[0]/domChild[0]</td>
+ <td>190,7</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>button-initial</td>
+</tr>
+<tr>
+ <td>open</td>
+ <td>/run/com.vaadin.tests.components.button.ButtonWithShortcutNotRendered</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>button-with-caption</td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/button/ButtonWithShortcutNotRendered.java b/uitest/src/com/vaadin/tests/components/button/ButtonWithShortcutNotRendered.java
new file mode 100644
index 0000000000..b01e0a85d0
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/button/ButtonWithShortcutNotRendered.java
@@ -0,0 +1,170 @@
+package com.vaadin.tests.components.button;
+
+import com.vaadin.annotations.PreserveOnRefresh;
+import com.vaadin.data.Item;
+import com.vaadin.data.Property;
+import com.vaadin.data.util.HierarchicalContainer;
+import com.vaadin.event.ShortcutAction.KeyCode;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.shared.ui.MarginInfo;
+import com.vaadin.tests.components.AbstractTestUI;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.DefaultFieldFactory;
+import com.vaadin.ui.Field;
+import com.vaadin.ui.Form;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Table;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.VerticalSplitPanel;
+
+@PreserveOnRefresh
+@SuppressWarnings("deprecation")
+public class ButtonWithShortcutNotRendered extends AbstractTestUI {
+
+ @Override
+ protected String getTestDescription() {
+ return "Button with shortcut broken if the shortcut is rendered before the button";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 9825;
+ }
+
+ Button defaultButton;
+ Button otherButton;
+
+ @SuppressWarnings("unchecked")
+ @Override
+ protected void setup(VaadinRequest request) {
+ getLayout().setWidth(100, Unit.PERCENTAGE);
+ getLayout().setHeight(null);
+ getLayout().setMargin(new MarginInfo(true, false, false, false));
+
+ HierarchicalContainer container = new HierarchicalContainer();
+ container.addContainerProperty("t1", String.class, "");
+ container.addContainerProperty("t2", String.class, "");
+
+ Item item = container.addItem("r1");
+ item.getItemProperty("t1").setValue("Row1 t1");
+ item.getItemProperty("t2").setValue("Row1 t2");
+
+ item = container.addItem("r2");
+ item.getItemProperty("t1").setValue("Row2 t1");
+ item.getItemProperty("t2").setValue("Row2 t2");
+
+ MyForm form = new MyForm();
+ MyTable table = new MyTable(form, container);
+
+ VerticalSplitPanel splitPanel = new VerticalSplitPanel();
+ splitPanel.setWidth(100, Unit.PERCENTAGE);
+ splitPanel.setHeight(400, Unit.PIXELS);
+ splitPanel.setFirstComponent(table);
+ splitPanel.setSecondComponent(form);
+ splitPanel.setSplitPosition(50, Unit.PERCENTAGE);
+
+ addComponent(splitPanel);
+ }
+
+ public class MyTable extends Table {
+ final MyForm form;
+
+ public MyTable(MyForm pform, HierarchicalContainer container) {
+ form = pform;
+ setContainerDataSource(container);
+ setSelectable(true);
+ setImmediate(true);
+ setWidth(100, Unit.PERCENTAGE);
+ setHeight(null);
+
+ addValueChangeListener(new Property.ValueChangeListener() {
+
+ public void valueChange(
+ com.vaadin.data.Property.ValueChangeEvent event) {
+ final Item item = getItem(getValue());
+ form.setItemDataSource(item);
+ }
+
+ });
+ }
+ }
+
+ public class MyForm extends Form implements ClickListener {
+ final GridLayout layout;
+
+ @SuppressWarnings("unchecked")
+ public MyForm() {
+ setWidth(100, Unit.PERCENTAGE);
+ setHeight(null);
+ setImmediate(true);
+
+ setFormFieldFactory(new DefaultFieldFactory() {
+
+ @Override
+ public TextField createField(Item item, Object propertyId,
+ Component uiContext) {
+ TextField t = new TextField();
+ t.setWidth(100, Unit.PERCENTAGE);
+ t.setHeight(null);
+ t.setCaption((String) propertyId);
+ t.setImmediate(false);
+ return t;
+ }
+ });
+
+ layout = new GridLayout(2, 1);
+ layout.setWidth(100, Unit.PERCENTAGE);
+ layout.setHeight(null);
+ layout.setColumnExpandRatio(0, 0.5f);
+ layout.setColumnExpandRatio(1, 0.5f);
+ layout.setMargin(true);
+ layout.setSpacing(true);
+ setLayout(layout);
+
+ HorizontalLayout footer = new HorizontalLayout();
+ footer.setSpacing(true);
+ footer.setMargin(false);
+ footer.setVisible(false);
+ setFooter(footer);
+
+ defaultButton = new Button("Default Button", this);
+ defaultButton.setClickShortcut(KeyCode.ENTER);
+ footer.addComponent(defaultButton);
+
+ otherButton = new Button("Other button", this);
+ footer.addComponent(otherButton);
+ }
+
+ @Override
+ public void setItemDataSource(Item newDataSource) {
+ if (newDataSource != null) {
+ super.setItemDataSource(newDataSource);
+ layout.setVisible(true);
+ getFooter().setVisible(true);
+ } else {
+ super.setItemDataSource(null);
+ layout.setVisible(false);
+ getFooter().setVisible(false);
+ }
+ }
+
+ @Override
+ @SuppressWarnings("rawtypes")
+ protected void attachField(Object propertyId, Field field) {
+ if (propertyId.equals("t1")) {
+ layout.addComponent(field, 0, 0);
+ } else if (propertyId.equals("t2")) {
+ layout.addComponent(field, 1, 0);
+ }
+ }
+
+ public void buttonClick(ClickEvent event) {
+ // NOP
+ }
+
+ }
+}
diff --git a/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutCases.java b/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutCases.java
index da6946f432..fe1dfe3e6d 100644
--- a/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutCases.java
+++ b/uitest/src/com/vaadin/tests/components/orderedlayout/OrderedLayoutCases.java
@@ -321,6 +321,18 @@ public class OrderedLayoutCases extends AbstractTestUI {
setChildState(0, 2, 1);
// Height: 100% to middle child
setChildState(1, 1, 4);
+ }
+ }));
+
+ caseBar.addComponent(new Button("Undefined + alignments",
+ new ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ resetState();
+ // Height: 350px to left child
+ setChildState(0, 1, 2);
+ // Short caption to left child
+ setChildState(0, 2, 1);
// Alignment: bottom left to right child
setChildState(2, 4, 7);
}
diff --git a/uitest/src/com/vaadin/tests/components/popupview/ClickingWhilePopupOpen.html b/uitest/src/com/vaadin/tests/components/popupview/ClickingWhilePopupOpen.html
new file mode 100644
index 0000000000..81676f6599
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/popupview/ClickingWhilePopupOpen.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="http://localhost:8068/" />
+<title>ClickingWhilePopupOpen</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">ClickingWhilePopupOpen</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/ClickingWhilePopupOpen?restartApplication&amp;debug</td>
+ <td></td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runClickingWhilePopupOpen::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupView[0]</td>
+ <td>132,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runClickingWhilePopupOpen::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPopupView[0]</td>
+ <td>132,7</td>
+</tr>
+<tr>
+ <td>assertTextNotPresent</td>
+ <td>IllegalStateException: Cannot set a new parent without first clearing the old parent</td>
+ <td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/popupview/ClickingWhilePopupOpen.java b/uitest/src/com/vaadin/tests/components/popupview/ClickingWhilePopupOpen.java
new file mode 100644
index 0000000000..239c774180
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/popupview/ClickingWhilePopupOpen.java
@@ -0,0 +1,26 @@
+package com.vaadin.tests.components.popupview;
+
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.PopupView;
+
+public class ClickingWhilePopupOpen extends TestBase {
+
+ @Override
+ protected void setup() {
+ Label popup = new Label("Popup");
+ popup.setSizeUndefined();
+ addComponent(new PopupView("Click here to open the popup", popup));
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Clicking the popup view when the popup is already open throws a client-side IllegalStateException";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return 8786;
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java b/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java
new file mode 100644
index 0000000000..93e7cafa99
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/table/ValueAfterClearingContainer.java
@@ -0,0 +1,121 @@
+package com.vaadin.tests.components.table;
+
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.Property.ValueChangeListener;
+import com.vaadin.tests.components.TestBase;
+import com.vaadin.tests.util.Log;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.Table;
+
+public class ValueAfterClearingContainer extends TestBase {
+
+ private static final String PROPERTY_ID = "property";
+
+ private Log log = new Log(5);
+ private final Table table = new Table();
+
+ @Override
+ protected void setup() {
+ table.setSelectable(true);
+ table.addContainerProperty(PROPERTY_ID, Integer.class, null);
+ table.setImmediate(true);
+ table.addValueChangeListener(new ValueChangeListener() {
+
+ public void valueChange(ValueChangeEvent event) {
+ log.log("Value changed to " + event.getProperty().getValue());
+ }
+ });
+ addComponent(log);
+
+ addComponent(table);
+ final CheckBox multiselect = new CheckBox("Multiselect");
+ multiselect.setImmediate(true);
+ multiselect.addValueChangeListener(new ValueChangeListener() {
+
+ public void valueChange(ValueChangeEvent event) {
+ Boolean value = multiselect.getValue();
+ table.setMultiSelect(value == null ? false : value);
+ }
+ });
+ addComponent(multiselect);
+ addComponent(new Button("Add table items", new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ if (!table.getItemIds().isEmpty()) {
+ Notification.show("Only possible when the table is empty");
+ return;
+ } else {
+ for (int i = 0; i < 5; i++) {
+ table.addItem(new Object[] { Integer.valueOf(i) },
+ Integer.valueOf(i));
+ }
+ }
+ }
+ }));
+
+ addComponent(new Button("Show value", new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ log.log("Table selection: " + table.getValue());
+ }
+ }));
+
+ addComponent(new Button("Remove items from table",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ table.removeAllItems();
+ }
+ }));
+
+ addComponent(new Button("Remove items from container",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ table.getContainerDataSource().removeAllItems();
+ }
+ }));
+ addComponent(new Button("Remove items from container and sanitize",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ table.getContainerDataSource().removeAllItems();
+ table.sanitizeSelection();
+ }
+ }));
+ addComponent(new Button("Remove selected item from table",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ Object selection = table.getValue();
+ if (selection == null) {
+ Notification.show("There is no selection");
+ return;
+ } else {
+ table.removeItem(selection);
+ }
+ }
+ }));
+ addComponent(new Button("Remove selected item from container",
+ new Button.ClickListener() {
+ public void buttonClick(ClickEvent event) {
+ Object selection = table.getValue();
+ if (selection == null) {
+ Notification.show("There is no selection");
+ return;
+ } else {
+ table.getContainerDataSource()
+ .removeItem(selection);
+ }
+ }
+ }));
+ }
+
+ @Override
+ protected String getDescription() {
+ return "Table value should be cleared when the selected item is removed from the container.";
+ }
+
+ @Override
+ protected Integer getTicketNumber() {
+ return Integer.valueOf(9986);
+ }
+
+}
diff --git a/uitest/src/com/vaadin/tests/components/uitest/base_theme_test.html b/uitest/src/com/vaadin/tests/components/uitest/base_theme_test.html
new file mode 100644
index 0000000000..27805ef61e
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/base_theme_test.html
@@ -0,0 +1,432 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>base_theme_test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">base_theme_test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/ThemeTestUI?restartApplication&amp;theme=base</td>
+ <td></td>
+</tr>
+<tr>
+ <td>setSpeed</td>
+ <td>150</td>
+ <td>150</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>labels</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[2]/div/div/div</td>
+ <td>31,8</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>buttons</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[3]/div/div/div</td>
+ <td>27,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>embedded</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[4]/div/div</td>
+ <td>33,24</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield0']/button</td>
+ <td>11,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-first-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[2]/div/div[3]/div/div</td>
+ <td>402,158</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield1']/button</td>
+ <td>14,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-second-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield2']/button</td>
+ <td>9,16</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-third-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield3']/button</td>
+ <td>9,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-fourth-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[5]/div/div/div</td>
+ <td>35,2</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>textfields</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[6]/div/div/div</td>
+ <td>27,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select0']/div</td>
+ <td>9,11</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-first-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select1']/div</td>
+ <td>10,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-second-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select6']/div</td>
+ <td>7,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-third-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select7']/div</td>
+ <td>7,12</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-fourth-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select8']/div</td>
+ <td>9,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[7]/div/div/div</td>
+ <td>20,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>sliders</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[8]/div/div/div</td>
+ <td>18,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VVerticalLayout[0]</td>
+ <td>518,136</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>uploads</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[9]/div/div/div</td>
+ <td>18,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>forms</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[10]/div/div</td>
+ <td>22,25</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables</td>
+</tr>
+<tr>
+ <td>contextmenu</td>
+ <td>//div[@id='table0']/div[2]/div[1]/table/tbody/tr[2]/td[1]/div</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables-contextmenu</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='table0']/div[1]/div[2]</td>
+ <td>12,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables-collapsemenu</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[11]/div/div/div</td>
+ <td>28,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>trees</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[12]/div/div</td>
+ <td>52,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>treetable</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[13]/div/div</td>
+ <td>23,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>layouts</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[14]/div/div/div</td>
+ <td>24,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tabsheets</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[15]/div/div/div</td>
+ <td>24,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>accordions</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[16]/div/div/div</td>
+ <td>15,0</td>
+</tr>
+<!--Window and Notification screenshots-->
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton0']/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-default</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-light</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>11,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-black</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>8,5</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-dialog</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton4']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-opaque</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>10,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[17]/div/div</td>
+ <td>46,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt0']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-humanized</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>214,15</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-warning</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>172,13</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-error</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>318,11</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-tray</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>66,9</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/uitest/chameleon_theme_test.html b/uitest/src/com/vaadin/tests/components/uitest/chameleon_theme_test.html
new file mode 100644
index 0000000000..754fadf3d6
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/chameleon_theme_test.html
@@ -0,0 +1,432 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>chameleon_theme_test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">chameleon_theme_test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/ThemeTestUI?restartApplication&amp;theme=chameleon</td>
+ <td></td>
+</tr>
+<tr>
+ <td>setSpeed</td>
+ <td>150</td>
+ <td>150</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>labels</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[2]/div/div/div</td>
+ <td>31,8</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>buttons</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[3]/div/div/div</td>
+ <td>27,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>embedded</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[4]/div/div</td>
+ <td>33,24</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield0']/button</td>
+ <td>11,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-first-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[2]/div/div[3]/div/div</td>
+ <td>402,158</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield1']/button</td>
+ <td>14,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-second-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield2']/button</td>
+ <td>9,16</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-third-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield3']/button</td>
+ <td>9,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-fourth-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[5]/div/div/div</td>
+ <td>35,2</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>textfields</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[6]/div/div/div</td>
+ <td>27,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select0']/div</td>
+ <td>9,11</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-first-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select1']/div</td>
+ <td>10,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-second-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select6']/div</td>
+ <td>7,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-third-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select7']/div</td>
+ <td>7,12</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-fourth-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select8']/div</td>
+ <td>9,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[7]/div/div/div</td>
+ <td>20,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>sliders</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[8]/div/div/div</td>
+ <td>18,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VVerticalLayout[0]</td>
+ <td>518,136</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>uploads</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[9]/div/div/div</td>
+ <td>18,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>forms</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[10]/div/div</td>
+ <td>22,25</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables</td>
+</tr>
+<tr>
+ <td>contextmenu</td>
+ <td>//div[@id='table0']/div[2]/div[1]/table/tbody/tr[2]/td[1]/div</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables-contextmenu</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='table0']/div[1]/div[2]</td>
+ <td>12,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables-collapsemenu</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[11]/div/div/div</td>
+ <td>28,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>trees</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[12]/div/div</td>
+ <td>52,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>treetable</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[13]/div/div</td>
+ <td>23,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>layouts</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[14]/div/div/div</td>
+ <td>24,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tabsheets</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[15]/div/div/div</td>
+ <td>24,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>accordions</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[16]/div/div/div</td>
+ <td>15,0</td>
+</tr>
+<!--Window and Notification screenshots-->
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton0']/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-default</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-light</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>11,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-black</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>8,5</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-dialog</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton4']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-opaque</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>10,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[17]/div/div</td>
+ <td>46,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt0']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-humanized</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>214,15</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-warning</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>172,13</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-error</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>318,11</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-tray</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>66,9</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/uitest/liferay_theme_test.html b/uitest/src/com/vaadin/tests/components/uitest/liferay_theme_test.html
new file mode 100644
index 0000000000..04778d76ba
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/liferay_theme_test.html
@@ -0,0 +1,432 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>liferay_theme_test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">liferay_theme_test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/ThemeTestUI?restartApplication&amp;theme=liferay</td>
+ <td></td>
+</tr>
+<tr>
+ <td>setSpeed</td>
+ <td>150</td>
+ <td>150</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>labels</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[2]/div/div/div</td>
+ <td>31,8</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>buttons</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[3]/div/div/div</td>
+ <td>27,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>embedded</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[4]/div/div</td>
+ <td>33,24</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield0']/button</td>
+ <td>11,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-first-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[2]/div/div[3]/div/div</td>
+ <td>402,158</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield1']/button</td>
+ <td>14,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-second-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield2']/button</td>
+ <td>9,16</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-third-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield3']/button</td>
+ <td>9,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-fourth-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[5]/div/div/div</td>
+ <td>35,2</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>textfields</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[6]/div/div/div</td>
+ <td>27,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select0']/div</td>
+ <td>9,11</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-first-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select1']/div</td>
+ <td>10,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-second-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select6']/div</td>
+ <td>7,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-third-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select7']/div</td>
+ <td>7,12</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-fourth-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select8']/div</td>
+ <td>9,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[7]/div/div/div</td>
+ <td>20,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>sliders</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[8]/div/div/div</td>
+ <td>18,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VVerticalLayout[0]</td>
+ <td>518,136</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>uploads</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[9]/div/div/div</td>
+ <td>18,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>forms</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[10]/div/div</td>
+ <td>22,25</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables</td>
+</tr>
+<tr>
+ <td>contextmenu</td>
+ <td>//div[@id='table0']/div[2]/div[1]/table/tbody/tr[2]/td[1]/div</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables-contextmenu</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='table0']/div[1]/div[2]</td>
+ <td>12,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables-collapsemenu</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[11]/div/div/div</td>
+ <td>28,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>trees</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[12]/div/div</td>
+ <td>52,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>treetable</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[13]/div/div</td>
+ <td>23,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>layouts</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[14]/div/div/div</td>
+ <td>24,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tabsheets</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[15]/div/div/div</td>
+ <td>24,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>accordions</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[16]/div/div/div</td>
+ <td>15,0</td>
+</tr>
+<!--Window and Notification screenshots-->
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton0']/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-default</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-light</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>11,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-black</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>8,5</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-dialog</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton4']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-opaque</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>10,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[17]/div/div</td>
+ <td>46,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt0']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-humanized</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>214,15</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-warning</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>172,13</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-error</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>318,11</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-tray</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>66,9</td>
+</tr>
+</tbody></table>
+</body>
+</html>
diff --git a/uitest/src/com/vaadin/tests/components/uitest/runo_theme_test.html b/uitest/src/com/vaadin/tests/components/uitest/runo_theme_test.html
new file mode 100644
index 0000000000..725d5bda74
--- /dev/null
+++ b/uitest/src/com/vaadin/tests/components/uitest/runo_theme_test.html
@@ -0,0 +1,432 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head profile="http://selenium-ide.openqa.org/profiles/test-case">
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link rel="selenium.base" href="" />
+<title>runo_theme_test</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">runo_theme_test</td></tr>
+</thead><tbody>
+<tr>
+ <td>open</td>
+ <td>/run/ThemeTestUI?restartApplication&amp;theme=runo</td>
+ <td></td>
+</tr>
+<tr>
+ <td>setSpeed</td>
+ <td>150</td>
+ <td>150</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>labels</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[2]/div/div/div</td>
+ <td>31,8</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>buttons</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[3]/div/div/div</td>
+ <td>27,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>embedded</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[4]/div/div</td>
+ <td>33,24</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield0']/button</td>
+ <td>11,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-first-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[2]/div/div[3]/div/div</td>
+ <td>402,158</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield1']/button</td>
+ <td>14,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-second-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield2']/button</td>
+ <td>9,16</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-third-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='datefield3']/button</td>
+ <td>9,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>dates-fourth-popup</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[5]/div/div/div</td>
+ <td>35,2</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>textfields</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[6]/div/div/div</td>
+ <td>27,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select0']/div</td>
+ <td>9,11</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-first-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select1']/div</td>
+ <td>10,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-second-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select6']/div</td>
+ <td>7,13</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-third-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select7']/div</td>
+ <td>7,12</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>selects-fourth-open</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='select8']/div</td>
+ <td>9,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[7]/div/div/div</td>
+ <td>20,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>sliders</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[8]/div/div/div</td>
+ <td>18,5</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VVerticalLayout[0]</td>
+ <td>518,136</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>uploads</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[9]/div/div/div</td>
+ <td>18,10</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>forms</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[10]/div/div</td>
+ <td>22,25</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables</td>
+</tr>
+<tr>
+ <td>contextmenu</td>
+ <td>//div[@id='table0']/div[2]/div[1]/table/tbody/tr[2]/td[1]/div</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables-contextmenu</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='table0']/div[1]/div[2]</td>
+ <td>12,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tables-collapsemenu</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[11]/div/div/div</td>
+ <td>28,3</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>trees</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[12]/div/div</td>
+ <td>52,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>treetable</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[13]/div/div</td>
+ <td>23,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>layouts</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[14]/div/div/div</td>
+ <td>24,1</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>tabsheets</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[15]/div/div/div</td>
+ <td>24,9</td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>accordions</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[16]/div/div/div</td>
+ <td>15,0</td>
+</tr>
+<!--Window and Notification screenshots-->
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton0']/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-default</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-light</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>11,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-black</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>8,5</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-dialog</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>9,6</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='windButton4']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>subwindow-opaque</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::/VWindow[0]/domChild[0]/domChild[0]/domChild[1]</td>
+ <td>10,7</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>//div[@id='testsampler']/div[1]/table/tbody/tr/td[17]/div/div</td>
+ <td>46,8</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt0']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-humanized</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>214,15</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt1']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-warning</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>172,13</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt2']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-error</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>318,11</td>
+</tr>
+<tr>
+ <td>click</td>
+ <td>//div[@id='notifButt3']/span/span</td>
+ <td></td>
+</tr>
+<tr>
+ <td>screenCapture</td>
+ <td></td>
+ <td>notification-tray</td>
+</tr>
+<tr>
+ <td>mouseClick</td>
+ <td>vaadin=runThemeTestUI::Root/VNotification[0]</td>
+ <td>66,9</td>
+</tr>
+</tbody></table>
+</body>
+</html>