Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/CSSUtil.java')
-rw-r--r--bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/CSSUtil.java335
1 files changed, 335 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/CSSUtil.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/CSSUtil.java
new file mode 100644
index 0000000000..adfd9ea726
--- /dev/null
+++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/CSSUtil.java
@@ -0,0 +1,335 @@
+/*******************************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.css.core.internal.util;
+
+
+
+import java.util.Enumeration;
+import java.util.Iterator;
+
+import org.eclipse.wst.css.core.internal.Logger;
+import org.eclipse.wst.css.core.internal.parser.CSSRegionUtil;
+import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts;
+import org.eclipse.wst.css.core.internal.parserz.CSSTextToken;
+import org.eclipse.wst.sse.core.text.IStructuredDocumentRegion;
+import org.eclipse.wst.sse.core.text.IStructuredDocumentRegionList;
+import org.eclipse.wst.sse.core.text.ITextRegion;
+import org.eclipse.wst.sse.core.text.ITextRegionList;
+
+
+public class CSSUtil {
+
+ /**
+ *
+ */
+ public static void debugOut(String str) {
+ Logger.log(Logger.WARNING, "css warning: " + str); //$NON-NLS-1$
+ }
+
+ /**
+ *
+ */
+ // public static Vector extractMediaContents(Vector regions) {
+ // Vector media = new Vector();
+ // if (regions == null) { return media; }
+ //
+ // boolean bReady = true;
+ // for (Iterator i = regions.iterator(); i.hasNext(); ) {
+ // ITextRegion region = (ITextRegion)i.next();
+ // if (region == null) { continue; }
+ // String type = region.getType();
+ // if (bReady) {
+ // if (type == IDENT) {
+ // media.addElement(region.getText());
+ // bReady = false;
+ // }
+ // } else {
+ // if (type == COMMA) {
+ // bReady = true;
+ // }
+ // }
+ // }
+ //
+ // return media;
+ // }
+ /**
+ *
+ */
+ public static String extractStringContents(String text) {
+ return stripQuotes(text);
+ }
+
+ /**
+ *
+ */
+ public static String extractUriContents(String text) {
+ String contents = text.trim();
+ if (contents.toLowerCase().startsWith("url(") && //$NON-NLS-1$
+ contents.toLowerCase().endsWith(")")) {//$NON-NLS-1$
+ // strip "url(", ")"
+ contents = contents.substring(4, contents.length() - 1);
+ }
+ contents = stripQuotes(contents);
+
+ return contents;
+ }
+
+ /**
+ *
+ */
+ public static IStructuredDocumentRegion findNextSignificantNode(IStructuredDocumentRegion startNode) {
+ if (startNode == null) {
+ return null;
+ }
+ IStructuredDocumentRegion node = startNode.getNext();
+ while (node != null) {
+ String type = getStructuredDocumentRegionType(node);
+ if (type != CSSRegionContexts.CSS_S && type != CSSRegionContexts.CSS_COMMENT && type != CSSRegionContexts.CSS_CDO && type != CSSRegionContexts.CSS_CDC) {
+ return node;
+ }
+ node = node.getNext();
+ }
+ return null;
+ }
+
+ /**
+ *
+ */
+ public static IStructuredDocumentRegion findNodeBackward(IStructuredDocumentRegion startNode, IStructuredDocumentRegion endNode, String type) {
+ IStructuredDocumentRegion node;
+ for (node = startNode; node != null; node = node.getPrevious()) {
+ if (node.getStartOffset() < endNode.getStartOffset()) {
+ node = null;
+ break;
+ }
+ else if (getStructuredDocumentRegionType(node) == type) {
+ break;
+ }
+ }
+ return node;
+ }
+
+ /**
+ *
+ */
+ public static IStructuredDocumentRegion findNodeForward(IStructuredDocumentRegion startNode, IStructuredDocumentRegion endNode, String type) {
+ IStructuredDocumentRegion node;
+ for (node = startNode; node != null; node = node.getNext()) {
+ if (endNode.getStartOffset() < node.getStartOffset()) {
+ node = null;
+ break;
+ }
+ else if (getStructuredDocumentRegionType(node) == type) {
+ break;
+ }
+ }
+ return node;
+ }
+
+ /**
+ *
+ */
+ public static IStructuredDocumentRegion findPreviousSignificantNode(IStructuredDocumentRegion startNode) {
+ if (startNode == null) {
+ return null;
+ }
+ IStructuredDocumentRegion node = startNode.getPrevious();
+ while (node != null) {
+ String type = getStructuredDocumentRegionType(node);
+ if (type != CSSRegionContexts.CSS_S && type != CSSRegionContexts.CSS_COMMENT && type != CSSRegionContexts.CSS_CDO && type != CSSRegionContexts.CSS_CDC) {
+ return node;
+ }
+ node = node.getPrevious();
+ }
+ return null;
+ }
+
+ /**
+ *
+ */
+ public static String getClassString(Object object) {
+ if (object == null) {
+ return "null"; //$NON-NLS-1$
+ }
+ else {
+ String name = object.getClass().toString();
+ int lastPeriod = name.lastIndexOf('.');
+ return name.substring(lastPeriod + 1);
+ }
+ }
+
+ /**
+ *
+ */
+ public static String getStructuredDocumentRegionType(IStructuredDocumentRegion flatNode) {
+ if (flatNode == null) {
+ return CSSRegionContexts.CSS_UNDEFINED;
+ }
+ ITextRegionList regions = flatNode.getRegions();
+ if (regions == null || regions.size() == 0) {
+ return CSSRegionContexts.CSS_UNDEFINED;
+ }
+ ITextRegion region = regions.get(0);
+ return region.getType();
+ }
+
+ /**
+ *
+ */
+ public static int getLengthDifference(IStructuredDocumentRegionList newNodes, IStructuredDocumentRegionList oldNodes) {
+ int newLen = getTextLength(newNodes);
+ int oldLen = getTextLength(oldNodes);
+ return newLen - oldLen;
+ }
+
+ /**
+ *
+ */
+ public static String getRegionText(IStructuredDocumentRegion flatNode, ITextRegionList regions) {
+ StringBuffer buf = new StringBuffer();
+ if (regions != null) {
+ for (Iterator i = regions.iterator(); i.hasNext();) {
+ ITextRegion region = (ITextRegion) i.next();
+ if (region == null) {
+ continue;
+ }
+ buf.append(flatNode.getText(region));
+ }
+ }
+
+ return buf.toString();
+ }
+
+ /**
+ *
+ */
+ public static int getTextLength(IStructuredDocumentRegionList nodes) {
+ int length = 0;
+
+ if (nodes != null) {
+ for (Enumeration e = nodes.elements(); e.hasMoreElements();) {
+ IStructuredDocumentRegion flatNode = (IStructuredDocumentRegion) e.nextElement();
+ if (flatNode != null) {
+ length += flatNode.getText().length();
+ }
+ }
+ }
+
+ return length;
+ }
+
+ /**
+ *
+ * @param token
+ * @return
+ */
+ public static boolean isLength(CSSTextToken token) {
+ if (token == null)
+ return false;
+ if (token.kind == CSSRegionContexts.CSS_DECLARATION_VALUE_DIMENSION)
+ return true;
+ if (token.kind == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER) {
+ double number = Double.parseDouble(token.image);
+ if (number == 0.0)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ *
+ */
+ public static boolean isSelectorText(IStructuredDocumentRegion region) {
+ String type = getStructuredDocumentRegionType(region);
+ if (CSSRegionUtil.isSelectorBegginingType(type)) {
+ return true;
+ }
+ else if (type == CSSRegionContexts.CSS_UNKNOWN) {
+ // String text = flatNode.getText();
+ // if (text != null && text.indexOf('.') == 0) {
+ return true;
+ // }
+ }
+
+ return false;
+ }
+
+ /**
+ *
+ */
+ public static String stripQuotes(String text) {
+ if (text == null)
+ return null;
+ String contents = text.trim();
+ if (2 <= contents.length()) {
+ char first = contents.charAt(0);
+ char last = contents.charAt(contents.length() - 1);
+ if ((first == '\"' && last == '\"') || (first == '\'' && last == '\'')) {
+ contents = contents.substring(1, contents.length() - 1);
+ }
+ }
+ return contents;
+ }
+
+ public static String detectQuote(String source, String defaultQuote) {
+ if (source == null)
+ return defaultQuote;
+ final String D_QUOTE = "\""; //$NON-NLS-1$
+ final String S_QUOTE = "\'"; //$NON-NLS-1$
+
+ int dIndex = source.indexOf(D_QUOTE);
+ int sIndex = source.indexOf(S_QUOTE);
+ if (dIndex < 0 && sIndex < 0) {
+ return defaultQuote;
+ }
+ else if (dIndex < 0) {
+ return D_QUOTE;
+ }
+ else if (sIndex < 0) {
+ return S_QUOTE;
+ }
+ else if (dIndex < sIndex) {
+ return S_QUOTE;
+ }
+ else {
+ return D_QUOTE;
+ }
+ }
+
+ /**
+ *
+ */
+ public static void stripSurroundingSpace(ITextRegionList regions) {
+ if (regions == null) {
+ return;
+ }
+ while (!regions.isEmpty()) {
+ ITextRegion region = regions.get(0);
+ String type = region.getType();
+ if (type == CSSRegionContexts.CSS_S || type == CSSRegionContexts.CSS_COMMENT) {
+ regions.remove(0);
+ }
+ else {
+ break;
+ }
+ }
+ while (!regions.isEmpty()) {
+ ITextRegion region = regions.get(regions.size() - 1);
+ String type = region.getType();
+ if (type == CSSRegionContexts.CSS_S || type == CSSRegionContexts.CSS_COMMENT) {
+ regions.remove(region);
+ }
+ else {
+ break;
+ }
+ }
+ }
+} \ No newline at end of file

Back to the top