diff options
author | david_williams | 2005-04-10 01:59:51 +0000 |
---|---|---|
committer | david_williams | 2005-04-10 01:59:51 +0000 |
commit | 63219a2d13dec9a190adcbeab4038d788ff4358f (patch) | |
tree | d9a3e98042fc2819c0be32393eba4dae9865ed76 /bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/declaration/BorderTopShorthandAdapter.java | |
parent | d349d70aa97a92d92705fcf5b7c3dd3d3cb1cf93 (diff) | |
download | webtools.sourceediting-63219a2d13dec9a190adcbeab4038d788ff4358f.tar.gz webtools.sourceediting-63219a2d13dec9a190adcbeab4038d788ff4358f.tar.xz webtools.sourceediting-63219a2d13dec9a190adcbeab4038d788ff4358f.zip |
java doc and specification and internalization
Diffstat (limited to 'bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/declaration/BorderTopShorthandAdapter.java')
-rw-r--r-- | bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/declaration/BorderTopShorthandAdapter.java | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/declaration/BorderTopShorthandAdapter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/declaration/BorderTopShorthandAdapter.java new file mode 100644 index 0000000000..a728399aad --- /dev/null +++ b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/util/declaration/BorderTopShorthandAdapter.java @@ -0,0 +1,140 @@ +/******************************************************************************* + * 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.declaration; + + + +import org.eclipse.wst.css.core.internal.contentmodel.PropCMProperty; +import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; +import org.eclipse.wst.css.core.internal.parserz.CSSTextParser; +import org.eclipse.wst.css.core.internal.parserz.CSSTextToken; + + +/** + * For 'border-top' property 'border-top' will be expanded to + * 'border-top-color', 'border-top-style', 'border-top-width', + */ +public class BorderTopShorthandAdapter implements IShorthandAdapter { + + /** + * + */ + public BorderTopShorthandAdapter() { + super(); + } + + /** + * + */ + public boolean expand(String source, CSSPropertyContext dest) { + CSSTextParser parser = new CSSTextParser(CSSTextParser.MODE_DECLARATION_VALUE, source); + CSSTextToken[] tokens = parser.getTokens(); + if (tokens.length <= 0) { + return false; + } + String color = "", style = "", width = "";//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ + PropCMProperty propColor = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_TOP_COLOR); + PropCMProperty propStyle = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_TOP_STYLE); + PropCMProperty propWidth = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_TOP_WIDTH); + + for (int i = 0; i < tokens.length; i++) { + if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT) { + if (propStyle.canHave(tokens[i].image)) + style = tokens[i].image; + else if (propWidth.canHave(tokens[i].image)) + width = tokens[i].image; + else if (propColor.canHave(tokens[i].image)) + color = tokens[i].image; + } + else if (org.eclipse.wst.css.core.internal.util.CSSUtil.isLength(tokens[i]) || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER) { + width = tokens[i].image; + } + else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_HASH) { + color = tokens[i].image; + } + else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) { + StringBuffer buf = new StringBuffer(); + while (i < tokens.length) { + if (tokens[i].kind == CSSRegionContexts.CSS_COMMENT) { + i++; + continue; + } + buf.append(tokens[i].image); + if (tokens[i++].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE) + break; + } + i--; + color = buf.toString(); + } + } + + dest.set(propColor.getName(), color); + dest.set(propStyle.getName(), style); + dest.set(propWidth.getName(), width); + + return true; + } + + /** + * + */ + public String extract(String source, PropCMProperty propDest) { + CSSTextParser parser = new CSSTextParser(CSSTextParser.MODE_DECLARATION_VALUE, source); + CSSTextToken[] tokens = parser.getTokens(); + if (tokens.length <= 0) { + return null; + } + String color = null, style = null, width = null; + PropCMProperty propColor = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_TOP_COLOR); + PropCMProperty propStyle = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_TOP_STYLE); + PropCMProperty propWidth = PropCMProperty.getInstanceOf(PropCMProperty.P_BORDER_TOP_WIDTH); + + for (int i = 0; i < tokens.length; i++) { + if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_IDENT) { + if (propStyle.canHave(tokens[i].image)) + style = tokens[i].image; + else if (propWidth.canHave(tokens[i].image)) + width = tokens[i].image; + else if (propColor.canHave(tokens[i].image)) + color = tokens[i].image; + } + else if (org.eclipse.wst.css.core.internal.util.CSSUtil.isLength(tokens[i]) || tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_NUMBER) { + width = tokens[i].image; + } + else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_HASH) { + color = tokens[i].image; + } + else if (tokens[i].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) { + StringBuffer buf = new StringBuffer(); + while (i < tokens.length) { + if (tokens[i].kind == CSSRegionContexts.CSS_COMMENT) { + i++; + continue; + } + buf.append(tokens[i].image); + if (tokens[i++].kind == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE) + break; + } + i--; + color = buf.toString(); + } + } + + if (propColor == propDest) + return color; + else if (propStyle == propDest) + return style; + else if (propWidth == propDest) + return width; + else + return null; + } +}
\ No newline at end of file |