| /******************************************************************************* |
| * Copyright (c) 2006 Sybase, Inc. 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: |
| * Sybase, Inc. - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jst.pagedesigner.css2.color; |
| |
| import java.util.StringTokenizer; |
| |
| import org.eclipse.jst.jsf.common.ui.internal.logging.Logger; |
| import org.eclipse.jst.pagedesigner.PDPlugin; |
| import org.eclipse.swt.graphics.RGB; |
| |
| /** |
| * @author mengbo |
| */ |
| public class CSSColorConverter { |
| private static final String PREFIX_RGB = "rgb"; //$NON-NLS-1$ |
| |
| private static Logger _log = PDPlugin.getLogger(CSSColorConverter.class); |
| |
| private static CSSColorConverter _instance = new CSSColorConverter(); |
| |
| /** |
| * @return singleton instance |
| */ |
| public static CSSColorConverter getInstantce() { |
| if (_instance == null) { |
| _instance = new CSSColorConverter(); |
| } |
| return _instance; |
| } |
| |
| Object getCSSColor(String CSSText) { |
| if (CSSText == null) { |
| return null; |
| } |
| |
| CSSText = CSSText.trim().toLowerCase(); |
| if (CSSText.length() == 0) { |
| return null; |
| } |
| if (CSSColorDefaults.SYSTEM_DEFAULT_COLORS.containsKey(CSSText)) { |
| Object result = null; |
| result = CSSColorDefaults.SYSTEM_DEFAULT_COLORS.get(CSSText); |
| return result; |
| } else if (CSSColorDefaults.EXTENDED_COLORS.containsKey(CSSText)) { |
| Object result = null; |
| result = CSSColorDefaults.EXTENDED_COLORS.get(CSSText); |
| return result; |
| } else { |
| return convertStringToRGB(CSSText); |
| } |
| } |
| |
| private RGB convertStringToRGB(String CSSText) { |
| StringBuffer sb = new StringBuffer(CSSText); |
| int value; |
| try { |
| if (sb.indexOf("#") == 0) //$NON-NLS-1$ |
| { |
| if (sb.length() == 4) { |
| sb.insert(1, sb.charAt(1)); |
| sb.insert(3, sb.charAt(3)); |
| sb.insert(5, sb.charAt(5)); |
| value = Integer.parseInt(sb.substring(1, sb.length()) |
| .toString(), 16); |
| return new RGB(value >>> 16 & 0xff, value >>> 8 & 0xff, |
| value & 0xff); |
| } else if (sb.length() == 7) { |
| value = Integer.parseInt(sb.substring(1, sb.length()), 16); |
| return new RGB(value >>> 16 & 0xff, value >>> 8 & 0xff, |
| value & 0xff); |
| } |
| } else if (CSSText.startsWith(PREFIX_RGB)) { |
| return convertRgbToRGB(sb.substring( |
| sb.indexOf("(") + 1, sb.indexOf(")"))); //$NON-NLS-1$ //$NON-NLS-2$ |
| } |
| } catch (Exception e) { |
| _log.info("CSSColorConverter.0", CSSText, null); //$NON-NLS-1$ |
| return null; |
| } |
| return null; |
| } |
| |
| private RGB convertRgbToRGB(String text) { |
| text = text.trim(); |
| try { |
| StringTokenizer tokenizer = new StringTokenizer(text, ",");//$NON-NLS-1$ |
| |
| if (tokenizer.countTokens() != 3) { |
| return null; |
| } |
| String[] rgbText = new String[3]; |
| for (int i = 0; i < 3; i++) { |
| rgbText[i] = tokenizer.nextToken(); |
| } |
| |
| int[] intRGB = new int[] { 0, 0, 0 }; |
| for (int i = 0; i < 3; i++) { |
| int intValue = -1; |
| String textValue = rgbText[i].trim(); |
| |
| if (textValue.endsWith("%"))//$NON-NLS-1$ |
| { |
| textValue = textValue.substring(0, textValue.length() - 1); |
| |
| intValue = Integer.parseInt(textValue) * 255 / 100; |
| } else { |
| intValue = Integer.parseInt(textValue); |
| } |
| if (intValue < 0) { |
| intValue = 0; |
| } else if (intValue > 255) { |
| intValue = 255; |
| } |
| intRGB[i] = intValue; |
| } |
| return new RGB(intRGB[0], intRGB[1], intRGB[2]); |
| } catch (Exception e) { |
| // notify |
| _log.info("CSSColorConverter.1", text, null); //$NON-NLS-1$ |
| return null; |
| } |
| } |
| } |