Skip to content

Commit f284769

Browse files
committed
Replace Batik with an internal hand-written CSS parser and drop SAC
Introduce an internal recursive-descent CSS parser under impl/parser (a tokenizer, a LexicalUnit implementation, and CssParser) and wire it into CSSEngineImpl, removing the Batik/SAC parser stack in the same change so no intermediate state ships an unused parser. The parser produces the same model the SAC/Batik path produced (CSSStyleSheetImpl with CSSStyleRuleImpl / CSSImportRuleImpl rules, internal Selectors selector trees, and CSSValueFactory values). It is scoped to the subset the engine uses: type / class / id / attribute / pseudo selectors, child / descendant / adjacent combinators, length / percentage / number / colour / identifier / string / url() / rgb() values, !important, and @import. @media, @font-face and @page are parsed and discarded. Selector trees mirror the previous SAC translator so specificity and matching are unchanged. parseStyleSheet, parseStyleDeclaration, parsePropertyValue and parseSelectors now go through the internal parser; the InputSource-based overloads are gone, replaced by a parseStyleSheet(InputStream, uri) method that carries the base location for relative @import resolution. Deleted: the vendored SAC plumbing (impl/sac, core/sac), the SAC-backed CSSParser / AbstractCSSParser / parser factories, SacTranslator and SACConstants. The org.apache.batik.css Require-Bundle is removed. The only remaining SAC type is the LexicalUnit interface used by the impl/dom value model, which Phase 4 replaces. ThemeEngine and the test helpers move off InputSource; the css.swt margin/padding handlers throw IllegalArgumentException instead of the SAC CSSException. A malformed, unterminated at-rule block is now rejected. Verified by the full css.core (119) and css.swt (210) test suites, by CssParserTest, and by a differential comparison against Batik over all shipped Eclipse themes.
1 parent 8a0d043 commit f284769

38 files changed

Lines changed: 1304 additions & 1365 deletions

File tree

bundles/org.eclipse.e4.ui.css.core/META-INF/MANIFEST.MF

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ Bundle-Version: 0.14.800.qualifier
88
Export-Package: org.eclipse.e4.ui.css.core;x-internal:=true,
99
org.eclipse.e4.ui.css.core.css2;x-friends:="org.eclipse.e4.ui.css.swt.theme,org.eclipse.e4.ui.css.swt,org.eclipse.e4.ui.css.jface",
1010
org.eclipse.e4.ui.css.core.dom;x-friends:="org.eclipse.e4.ui.css.swt,org.eclipse.ui.views.properties.tabbed,org.eclipse.ui.forms",
11-
org.eclipse.e4.ui.css.core.dom.parsers;x-internal:=true,
1211
org.eclipse.e4.ui.css.core.dom.properties;
1312
x-friends:="org.eclipse.e4.ui.css.swt,
1413
org.eclipse.ui.workbench,
@@ -28,20 +27,16 @@ Export-Package: org.eclipse.e4.ui.css.core;x-internal:=true,
2827
org.eclipse.ui.forms",
2928
org.eclipse.e4.ui.css.core.exceptions;x-friends:="org.eclipse.e4.ui.css.swt",
3029
org.eclipse.e4.ui.css.core.impl.dom;x-internal:=true,
31-
org.eclipse.e4.ui.css.core.impl.dom.parsers;x-internal:=true,
3230
org.eclipse.e4.ui.css.core.impl.dom.properties;x-friends:="org.eclipse.e4.ui.css.swt",
3331
org.eclipse.e4.ui.css.core.impl.engine;x-friends:="org.eclipse.e4.ui.css.swt,org.eclipse.e4.ui.workbench.swt",
3432
org.eclipse.e4.ui.css.core.impl.engine.selector;x-friends:="org.eclipse.e4.ui.tests.css.core",
35-
org.eclipse.e4.ui.css.core.impl.sac;x-internal:=true,
33+
org.eclipse.e4.ui.css.core.impl.parser;x-friends:="org.eclipse.e4.ui.tests.css.core",
3634
org.eclipse.e4.ui.css.core.resources;x-friends:="org.eclipse.e4.ui.css.swt,org.eclipse.e4.ui.workbench.renderers.swt",
37-
org.eclipse.e4.ui.css.core.sac;x-internal:=true,
3835
org.eclipse.e4.ui.css.core.util.impl.resources;x-friends:="org.eclipse.e4.ui.css.swt.theme,org.eclipse.e4.ui.workbench.swt",
3936
org.eclipse.e4.ui.css.core.util.resources;x-friends:="org.eclipse.e4.ui.css.swt,org.eclipse.e4.ui.css.swt.theme,org.eclipse.e4.ui.workbench.swt",
4037
org.eclipse.e4.ui.css.core.utils;x-friends:="org.eclipse.e4.ui.css.swt"
41-
Import-Package: org.w3c.css.sac;version="1.3.0",
42-
org.w3c.css.sac.helpers;version="1.3.0"
43-
Require-Bundle: org.apache.batik.css;bundle-version="[1.9.1,2.0.0)",
44-
org.eclipse.equinox.common;bundle-version="[3.5.0,4.0.0)",
38+
Import-Package: org.w3c.css.sac;version="1.3.0"
39+
Require-Bundle: org.eclipse.equinox.common;bundle-version="[3.5.0,4.0.0)",
4540
org.eclipse.core.runtime;bundle-version="[3.29.0,4.0.0)"
4641
Bundle-RequiredExecutionEnvironment: JavaSE-17
4742
Automatic-Module-Name: org.eclipse.e4.ui.css.core

bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/SACConstants.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/dom/parsers/CSSParser.java

Lines changed: 0 additions & 125 deletions
This file was deleted.

bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/dom/parsers/CSSParserFactory.java

Lines changed: 0 additions & 30 deletions
This file was deleted.

bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/dom/parsers/ICSSParserFactory.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/engine/CSSEngine.java

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.eclipse.e4.ui.css.core.impl.engine.selector.Selectors;
2424
import org.eclipse.e4.ui.css.core.resources.IResourcesRegistry;
2525
import org.eclipse.e4.ui.css.core.util.resources.IResourcesLocatorManager;
26-
import org.w3c.css.sac.InputSource;
2726
import org.w3c.dom.Element;
2827
import org.w3c.dom.css.CSSStyleDeclaration;
2928
import org.w3c.dom.css.CSSStyleSheet;
@@ -51,9 +50,10 @@ public interface CSSEngine {
5150
StyleSheet parseStyleSheet(InputStream stream) throws IOException;
5251

5352
/**
54-
* Parse style sheet from InputSource source.
53+
* Parse style sheet from InputStream stream, using {@code uri} as the base
54+
* location for resolving relative {@code @import} rules.
5555
*/
56-
StyleSheet parseStyleSheet(InputSource source) throws IOException;
56+
StyleSheet parseStyleSheet(InputStream stream, String uri) throws IOException;
5757

5858
/*--------------- Parse style declaration -----------------*/
5959

@@ -72,11 +72,6 @@ public interface CSSEngine {
7272
*/
7373
CSSStyleDeclaration parseStyleDeclaration(InputStream stream) throws IOException;
7474

75-
/**
76-
* Parse style declaration from InputSource source.
77-
*/
78-
CSSStyleDeclaration parseStyleDeclaration(InputSource source) throws IOException;
79-
8075
/*--------------- Parse CSS Property Value-----------------*/
8176

8277
/**
@@ -94,23 +89,13 @@ public interface CSSEngine {
9489
*/
9590
CSSValue parsePropertyValue(Reader reader) throws IOException;
9691

97-
/**
98-
* Parse CSSValue from InputSource source.
99-
*/
100-
CSSValue parsePropertyValue(InputSource source) throws IOException;
101-
10292
/*--------------- Apply styles -----------------*/
10393

10494
/**
10595
* Parse Selectors from String value.
10696
*/
10797
Selectors.SelectorList parseSelectors(String text);
10898

109-
/**
110-
* Parse Selectors from InputSource value.
111-
*/
112-
Selectors.SelectorList parseSelectors(InputSource source) throws IOException;
113-
11499
/**
115100
* Parse Selectors from InputStream.
116101
*/
@@ -162,11 +147,6 @@ public interface CSSEngine {
162147
*/
163148
CSSStyleDeclaration parseAndApplyStyleDeclaration(Object node, InputStream stream) throws IOException;
164149

165-
/**
166-
* Parse and apply style declaration from InputSource source.
167-
*/
168-
CSSStyleDeclaration parseAndApplyStyleDeclaration(Object node, InputSource sourcee) throws IOException;
169-
170150
/**
171151
* Parse and apply style declaration from String style.
172152
*/

bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/AbstractCSSNode.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616
package org.eclipse.e4.ui.css.core.impl.dom;
1717

18-
import org.eclipse.e4.ui.css.core.dom.parsers.CSSParser;
19-
2018
/**
2119
* Abstract CSS Node.
2220
*/
@@ -26,9 +24,4 @@ public AbstractCSSNode() {
2624
super();
2725
}
2826

29-
public CSSParser getCSSParser() {
30-
//TODO not sure why this always returns null
31-
return null;
32-
}
33-
3427
}

bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/dom/MediaListImpl.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,15 @@
1717

1818
import java.util.ArrayList;
1919
import java.util.List;
20-
import org.w3c.css.sac.SACMediaList;
2120
import org.w3c.dom.DOMException;
2221
import org.w3c.dom.stylesheets.MediaList;
2322

2423
public class MediaListImpl implements MediaList {
2524

2625
private final List<String> mediaList;
2726

28-
public MediaListImpl(SACMediaList media) {
27+
public MediaListImpl() {
2928
mediaList = new ArrayList<>();
30-
for (int i = 0; i < media.getLength(); i++) {
31-
mediaList.add(media.item(i));
32-
}
33-
3429
}
3530

3631
@Override

0 commit comments

Comments
 (0)