diff options
Diffstat (limited to 'bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter')
27 files changed, 0 insertions, 5328 deletions
diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AbstractCSSSourceFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AbstractCSSSourceFormatter.java deleted file mode 100644 index 2ee8423f20..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AbstractCSSSourceFormatter.java +++ /dev/null @@ -1,981 +0,0 @@ -/******************************************************************************* - * 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.formatter; - -import java.util.ArrayList; -import java.util.Iterator; - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.DefaultLineTracker; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.TextUtilities; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategyImpl; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSDocument; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclItem; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclaration; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleSheet; -import org.eclipse.wst.css.core.internal.util.CSSLinkConverter; -import org.eclipse.wst.css.core.internal.util.CSSUtil; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.core.internal.util.Assert; - -/** - * - */ -public abstract class AbstractCSSSourceFormatter implements CSSSourceGenerator { - - protected final static short GENERATE = 0; - protected final static short FORMAT = 1; - protected final static short CLEANUP = 2; - protected static short strategy; - - /** - * - */ - AbstractCSSSourceFormatter() { - super(); - } - - /** - * - */ - protected void appendDelimBefore(ICSSNode node, CompoundRegion toAppend, StringBuffer source) { - if (node == null || source == null) - return; - if (isCleanup() && !getCleanupStrategy(node).isFormatSource()) - return; // for not formatting case on cleanup action - String delim = getLineDelimiter(node); - - boolean needIndent = !(node instanceof ICSSStyleSheet); - if (toAppend == null) { - source.append(delim); - source.append(getIndent(node)); - if (needIndent) - source.append(getIndentString()); - } - else { - String type = toAppend.getType(); - if (type == CSSRegionContexts.CSS_COMMENT) { - RegionIterator it = new RegionIterator(toAppend.getDocumentRegion(), toAppend.getTextRegion()); - it.prev(); - ITextRegion prev = it.prev(); - if (prev == null || (prev.getType() == CSSRegionContexts.CSS_S && TextUtilities.indexOf(DefaultLineTracker.DELIMITERS, it.getStructuredDocumentRegion().getText(prev), 0)[0] >= 0)) { - source.append(delim); - source.append(getIndent(node)); - if (needIndent) - source.append(getIndentString()); - } - else { - appendSpaceBefore(node, toAppend.getText(), source); - } - } - else if (type == CSSRegionContexts.CSS_DELIMITER || type == CSSRegionContexts.CSS_DECLARATION_DELIMITER) { - RegionIterator it = new RegionIterator(toAppend.getDocumentRegion(), toAppend.getTextRegion()); - it.prev(); - ITextRegion prev = it.prev(); - - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - - if (prev.getType() == CSSRegionContexts.CSS_S && TextUtilities.indexOf(DefaultLineTracker.DELIMITERS, it.getStructuredDocumentRegion().getText(prev), 0)[0] >= 0) { - source.append(delim); - source.append(getIndent(node)); - if (needIndent) - source.append(getIndentString()); - } - else if (preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH) > 0 && (!preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_PROHIBIT_WRAP_ON_ATTR) || node.getOwnerDocument().getNodeType() != ICSSNode.STYLEDECLARATION_NODE)) { - int length = getLastLineLength(node, source); - int append = 1; - if (length + append > preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH)) { - source.append(getLineDelimiter(node)); - source.append(getIndent(node)); - if (needIndent) - source.append(getIndentString()); - } - } - } - else if (type == CSSRegionContexts.CSS_RBRACE || type == CSSRegionContexts.CSS_LBRACE) { - source.append(delim); - source.append(getIndent(node)); - } - else { - source.append(delim); - source.append(getIndent(node)); - if (needIndent) - source.append(getIndentString()); - } - } - } - - /** - * - */ - protected void appendSpaceBefore(ICSSNode node, CompoundRegion toAppend, StringBuffer source) { - if (node == null || toAppend == null || source == null) - return; - if (isCleanup() && !getCleanupStrategy(node).isFormatSource()) - return; // for not formatting case on cleanup action - String type = toAppend.getType(); - - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - - boolean needIndent = !(node instanceof ICSSStyleSheet); - if (type == CSSRegionContexts.CSS_COMMENT) { - // check whether previous region is 'S' and has CR-LF - String delim = getLineDelimiter(node); - RegionIterator it = new RegionIterator(toAppend.getDocumentRegion(), toAppend.getTextRegion()); - it.prev(); - ITextRegion prev = it.prev(); - if (prev.getType() == CSSRegionContexts.CSS_S && TextUtilities.indexOf(DefaultLineTracker.DELIMITERS, it.getStructuredDocumentRegion().getText(prev), 0)[0] >= 0) { - source.append(delim); - source.append(getIndent(node)); - if (needIndent) - source.append(getIndentString()); - } - else { - appendSpaceBefore(node, toAppend.getText(), source); - } - } - else if (type == CSSRegionContexts.CSS_LBRACE && preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_NEWLINE_ON_OPEN_BRACE)) { - String delim = getLineDelimiter(node); - source.append(delim); - source.append(getIndent(node)); - // } else if (type == CSSRegionContexts.CSS_CURLY_BRACE_CLOSE) { - // } else if (type == CSSRegionContexts.CSS_INCLUDES || type == - // CSSRegionContexts.CSS_DASHMATCH) { - } - else if (type == CSSRegionContexts.CSS_DECLARATION_SEPARATOR && node instanceof ICSSStyleDeclItem) { - int n = preferences.getInt(CSSCorePreferenceNames.FORMAT_PROP_PRE_DELIM); - if (preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH) > 0 && (!preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_PROHIBIT_WRAP_ON_ATTR) || node.getOwnerDocument().getNodeType() != ICSSNode.STYLEDECLARATION_NODE)) { - int length = getLastLineLength(node, source); - int append = 1; - if (length + n + append > preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH)) { - source.append(getLineDelimiter(node)); - source.append(getIndent(node)); - if (needIndent) - source.append(getIndentString()); - n = 0; // no space is necessary - } - } - // no delimiter case - while (n-- > 0) - source.append(" ");//$NON-NLS-1$ - } - else if (type == CSSRegionContexts.CSS_DECLARATION_DELIMITER || type == CSSRegionContexts.CSS_DECLARATION_VALUE_OPERATOR || type == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE) { - if (preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH) > 0 && (!preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_PROHIBIT_WRAP_ON_ATTR) || node.getOwnerDocument().getNodeType() != ICSSNode.STYLEDECLARATION_NODE)) { - int length = getLastLineLength(node, source); - int append = 1; - if (length + append > preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH)) { - source.append(getLineDelimiter(node)); - source.append(getIndent(node)); - if (needIndent) - source.append(getIndentString()); - } - } - } - else if (CSSRegionContexts.CSS_FOREIGN_ELEMENT == type) { - return; - } - else - appendSpaceBefore(node, toAppend.getText(), source); - } - - /** - * - */ - protected void appendSpaceBefore(ICSSNode node, String toAppend, StringBuffer source) { - if (node == null || source == null) - return; - if (isCleanup() && !getCleanupStrategy(node).isFormatSource()) - return; // for not formatting case on cleanup action - - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - if (toAppend != null && toAppend.startsWith("{") && preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_NEWLINE_ON_OPEN_BRACE)) {//$NON-NLS-1$ - source.append(getLineDelimiter(node)); - source.append(getIndent(node)); - return; - } - else if (/* ! mgr.isOnePropertyPerLine() && */preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH) > 0 && (!preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_PROHIBIT_WRAP_ON_ATTR) || node.getOwnerDocument().getNodeType() != ICSSNode.STYLEDECLARATION_NODE)) { - int n = getLastLineLength(node, source); - int append = (toAppend != null) ? TextUtilities.indexOf(DefaultLineTracker.DELIMITERS, toAppend, 0)[0] : 0; - if (toAppend != null) - append = (append < 0) ? toAppend.length() : append; - if (n + append + 1 > preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH)) { - source.append(getLineDelimiter(node)); - source.append(getIndent(node)); - source.append(getIndentString()); - return; - } - } - source.append(" ");//$NON-NLS-1$ - } - - /** - * - */ - public final StringBuffer cleanup(ICSSNode node) { - short oldStrategy = strategy; - strategy = CLEANUP; - StringBuffer source = formatProc(node); - strategy = oldStrategy; - - return source; - } - - /** - * - */ - public final StringBuffer cleanup(ICSSNode node, IRegion region) { - short oldStrategy = strategy; - strategy = CLEANUP; - StringBuffer source = formatProc(node, region); - strategy = oldStrategy; - - return source; - } - - /** - * - */ - protected String decoratedIdentRegion(CompoundRegion region, CSSCleanupStrategy stgy) { - if (isFormat()) - return region.getText(); - - String text = region.getText(); - if (region.getType() == CSSRegionContexts.CSS_STRING || region.getType() == CSSRegionContexts.CSS_URI) - return decoratedRegion(region, 0, stgy); - - if (isCleanup()) { - if (stgy.getIdentCase() == CSSCleanupStrategy.ASIS || region.getType() == CSSRegionContexts.CSS_COMMENT) - return text; - else if (stgy.getIdentCase() == CSSCleanupStrategy.UPPER) - return text.toUpperCase(); - else - return text.toLowerCase(); - } - - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - if (region.getType() == CSSRegionContexts.CSS_COMMENT) - return text; - else if (preferences.getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER) - return text.toUpperCase(); - else - return text.toLowerCase(); - } - - /** - * - */ - protected String decoratedPropNameRegion(CompoundRegion region, CSSCleanupStrategy stgy) { - if (isFormat()) - return region.getText(); - - String text = region.getText(); - if (region.getType() == CSSRegionContexts.CSS_STRING || region.getType() == CSSRegionContexts.CSS_URI) - return decoratedRegion(region, 1, stgy); - if (isCleanup()) { - if (stgy.getPropNameCase() == CSSCleanupStrategy.ASIS || region.getType() != CSSRegionContexts.CSS_DECLARATION_PROPERTY) - return text; - else if (stgy.getPropNameCase() == CSSCleanupStrategy.UPPER) - return text.toUpperCase(); - else - return text.toLowerCase(); - } - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - - if (region.getType() != CSSRegionContexts.CSS_DECLARATION_PROPERTY) - return text; - else if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_NAME) == CSSCorePreferenceNames.UPPER) - return text.toUpperCase(); - else - return text.toLowerCase(); - } - - /** - * - */ - protected String decoratedPropValueRegion(CompoundRegion region, CSSCleanupStrategy stgy) { - if (isFormat()) - return region.getText(); - - String text = region.getText(); - String type = region.getType(); - if (type == CSSRegionContexts.CSS_STRING || type == CSSRegionContexts.CSS_URI) - return decoratedRegion(region, 2, stgy); - if (isCleanup()) { - if (stgy.getPropValueCase() != CSSCleanupStrategy.ASIS) { - if (type == CSSRegionContexts.CSS_COMMENT) { - } - else { - if (stgy.getPropValueCase() == CSSCleanupStrategy.UPPER) - text = text.toUpperCase(); - else - text = text.toLowerCase(); - } - } - } - return text; - } - - /** - * - */ - protected String decoratedRegion(CompoundRegion region, int type, CSSCleanupStrategy stgy) { - if (isFormat()) - return region.getText(); - - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - String text = region.getText(); - if (region.getType() == CSSRegionContexts.CSS_URI) { - String uri = CSSLinkConverter.stripFunc(text); - - boolean prefIsUpper = preferences.getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER; - boolean upper = (type == 0) ? prefIsUpper : ((type == 1) ? preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_NAME) == CSSCorePreferenceNames.UPPER : preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER); - String func = text.substring(0, 4); - if (isCleanup()) { - upper = ((type == 0) ? stgy.getIdentCase() : ((type == 1) ? stgy.getPropNameCase() : stgy.getPropValueCase())) == CSSCleanupStrategy.UPPER; - func = ((type == 0) ? stgy.getIdentCase() : ((type == 1) ? stgy.getPropNameCase() : stgy.getPropValueCase())) == CSSCleanupStrategy.ASIS ? text.substring(0, 4) : (upper ? "URL(" : "url(");//$NON-NLS-2$//$NON-NLS-1$ - } - if ((!isCleanup() && preferences.getBoolean(CSSCorePreferenceNames.FORMAT_QUOTE_IN_URI)) || (isCleanup() && stgy.isQuoteValues())) { - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - quote = CSSUtil.detectQuote(uri, quote); - text = func + quote + uri + quote + ")";//$NON-NLS-1$ - } - else if (isCleanup() && !stgy.isQuoteValues()) { - text = func + CSSLinkConverter.removeFunc(text) + ")";//$NON-NLS-1$ - } - else { - text = func + uri + ")";//$NON-NLS-1$ - } - } - else if (region.getType() == CSSRegionContexts.CSS_STRING && (!isCleanup() || stgy.isQuoteValues())) { - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - // begginning - if (!text.startsWith(quote)) { - if (text.startsWith("\"") || text.startsWith("\'")) //$NON-NLS-1$ //$NON-NLS-2$ - text = quote + text.substring(1); - else - text = quote + text; - } - // ending - if (!text.endsWith(quote)) { - if (text.endsWith("\"") || text.endsWith("\'")) //$NON-NLS-1$ //$NON-NLS-2$ - text = text.substring(0, text.length() - 1) + quote; - else - text = text + quote; - } - } - return text; - } - - /** - * - */ - public final StringBuffer format(ICSSNode node) { - short oldStrategy = strategy; - strategy = FORMAT; - StringBuffer source = formatProc(node); - strategy = oldStrategy; - - return source; - } - - /** - * - */ - public final StringBuffer format(ICSSNode node, IRegion region) { - short oldStrategy = strategy; - strategy = FORMAT; - StringBuffer source = formatProc(node, region); - strategy = oldStrategy; - - return source; - } - - /** - * - */ - public StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext context) { - return new StringBuffer(insert && (attr != null) ? attr.getValue() : "");//$NON-NLS-1$ - } - - /** - * Generate or format source between children('child' and its previous - * sibling) and append to string buffer - */ - abstract protected void formatBefore(ICSSNode node, ICSSNode child, String toAppend, StringBuffer source, IRegion exceptFor); - - /** - * Generate or format source between children('child' and its previous - * sibling) and append to string buffer - */ - public final StringBuffer formatBefore(ICSSNode node, ICSSNode child, IRegion exceptFor) { - Assert.isTrue(child == null || child.getParentNode() == node); - StringBuffer buf = new StringBuffer(); - formatBefore(node, child, /* (child != null) ? (child.getCssText()) : */"", buf, exceptFor);//$NON-NLS-1$ - return buf; - } - - /** - * Generate or format source between children('child' and its previous - * sibling) and append to string buffer - */ - protected abstract void formatBefore(ICSSNode node, ICSSNode child, IRegion region, String toAppend, StringBuffer source); - - /** - * - */ - protected final void formatChildren(ICSSNode node, StringBuffer source) { - ICSSNode child = node.getFirstChild(); - boolean first = true; - while (child != null) { - // append child - CSSSourceFormatter formatter = (CSSSourceFormatter) ((INodeNotifier) child).getAdapterFor(CSSSourceFormatter.class); - if (formatter == null) { - formatter = CSSSourceFormatterFactory.getInstance().getSourceFormatter((INodeNotifier) child); - } - StringBuffer childSource = ((AbstractCSSSourceFormatter) formatter).formatProc(child); - if (!first) { - formatBefore(node, child, new String(childSource), source, null); - } - source.append(childSource); - // append between children - child = child.getNextSibling(); - first = false; - } - } - - /** - * - */ - protected final void formatChildren(ICSSNode node, IRegion region, StringBuffer source) { - ICSSNode child = node.getFirstChild(); - int start = region.getOffset(); - int end = region.getOffset() + region.getLength(); - boolean first = true; - while (child != null) { - int curEnd = ((IndexedRegion) child).getEndOffset(); - StringBuffer childSource = null; - boolean toFinish = false; - if (start < curEnd) { - int curStart = ((IndexedRegion) child).getStartOffset(); - if (curStart < end) { - // append child - CSSSourceFormatter formatter = (CSSSourceFormatter) ((INodeNotifier) child).getAdapterFor(CSSSourceFormatter.class); - if (formatter == null) { - formatter = CSSSourceFormatterFactory.getInstance().getSourceFormatter((INodeNotifier) child); - } - if (includes(region, curStart, curEnd)) - childSource = ((AbstractCSSSourceFormatter) formatter).formatProc(child); - else - childSource = ((AbstractCSSSourceFormatter) formatter).formatProc(child, overlappedRegion(region, curStart, curEnd)); - } - else - toFinish = true; - } - // append between children - if (!first) { - curEnd = ((IndexedRegion) child).getStartOffset(); // change - // only - // start - if (start < curEnd) { - int curStart = ((IndexedRegion) child.getPreviousSibling()).getEndOffset(); - if (curStart < end) { - String toAppend = (childSource != null) ? new String(childSource) : "";//$NON-NLS-1$ - if (includes(region, curStart, curEnd)) - formatBefore(node, child, toAppend, source, null); - else - formatBefore(node, child, overlappedRegion(region, curStart, curEnd), toAppend, source); - } - } - } - if (childSource != null) { - source.append(childSource); - } - first = false; - if (toFinish) - break; - child = child.getNextSibling(); - } - } - - /** - * Generate or format source after the last child and append to string - * buffer - */ - protected abstract void formatPost(ICSSNode node, StringBuffer source); - - /** - * Generate or format source after the last child and append to string - * buffer - */ - protected abstract void formatPost(ICSSNode node, IRegion region, StringBuffer source); - - /** - * Generate or format source before the first child and append to string - * buffer - */ - protected abstract void formatPre(ICSSNode node, StringBuffer source); - - /** - * Generate or format source before the first child and append to string - * buffer - */ - abstract protected void formatPre(ICSSNode node, IRegion region, StringBuffer source); - - /** - * - * @return java.lang.StringBuffer - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - */ - protected final StringBuffer formatProc(ICSSNode node) { - StringBuffer source = new StringBuffer(); - formatPre(node, source); - formatChildren(node, source); - formatPost(node, source); - return source; - } - - /** - * - * @return java.lang.StringBuffer - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param region - * org.eclipse.jface.text.IRegion - */ - protected final StringBuffer formatProc(ICSSNode node, IRegion region) { - StringBuffer source = new StringBuffer(); - int curStart = ((IndexedRegion) node).getStartOffset(); - int curEnd = ((IndexedRegion) node).getEndOffset(); - if (node.getChildNodes().getLength() > 0) { - curEnd = ((IndexedRegion) node.getFirstChild()).getStartOffset(); - if (overlaps(region, curStart, curEnd)) { - if (includes(region, curStart, curEnd)) - formatPre(node, source); - else - formatPre(node, overlappedRegion(region, curStart, curEnd), source); - } - curStart = curEnd; - curEnd = ((IndexedRegion) node.getLastChild()).getEndOffset(); - if (overlaps(region, curStart, curEnd)) { - if (includes(region, curStart, curEnd)) - formatChildren(node, source); - else - formatChildren(node, overlappedRegion(region, curStart, curEnd), source); - } - curStart = curEnd; - curEnd = ((IndexedRegion) node).getEndOffset(); - if (overlaps(region, curStart, curEnd)) { - if (includes(region, curStart, curEnd)) - formatPost(node, source); - else - formatPost(node, overlappedRegion(region, curStart, curEnd), source); - } - } - else { - curEnd = getChildInsertPos(node); - if (overlaps(region, curStart, curEnd)) { - if (includes(region, curStart, curEnd)) - formatPre(node, source); - else - formatPre(node, overlappedRegion(region, curStart, curEnd), source); - } - curStart = curEnd; - curEnd = ((IndexedRegion) node).getEndOffset(); - if (overlaps(region, curStart, curEnd)) { - if (includes(region, curStart, curEnd)) - formatPost(node, source); - else - formatPost(node, overlappedRegion(region, curStart, curEnd), source); - } - } - return source; - } - - /** - * - */ - public int getAttrInsertPos(ICSSNode node, String attrName) { - return -1; - } - - /** - * Insert the method's description here. - * - * @return org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - */ - protected CSSCleanupStrategy getCleanupStrategy(ICSSNode node) { - CSSCleanupStrategy currentStrategy = CSSCleanupStrategyImpl.getInstance(); - ICSSDocument doc = node.getOwnerDocument(); - if (doc == null) - return currentStrategy; - ICSSModel model = doc.getModel(); - if (model == null) - return currentStrategy; - if (model.getStyleSheetType() != ICSSModel.EXTERNAL) { - // TODO - TRANSITION Nakamori-san, or Kit, how can we move to - // "HTML" plugin? - // can we subclass? - // currentStrategy = CSSInHTMLCleanupStrategyImpl.getInstance(); - } - return currentStrategy; - } - - /** - * - */ - protected String getIndent(ICSSNode node) { - if (node == null) - return "";//$NON-NLS-1$ - ICSSNode parent = node.getParentNode(); - if (node instanceof ICSSAttr) - parent = ((ICSSAttr) node).getOwnerCSSNode(); - if (parent == null) - return "";//$NON-NLS-1$ - if (node instanceof org.w3c.dom.css.CSSStyleDeclaration) - parent = parent.getParentNode(); - if (parent == null) - return "";//$NON-NLS-1$ - - String parentIndent = getIndent(parent); - if (parent instanceof org.w3c.dom.css.CSSRule) - return parentIndent + getIndentString(); - if (node.getParentNode() instanceof ICSSStyleDeclaration) - return parentIndent + getIndentString(); - return parentIndent; - } - - /** - * - */ - protected int getLastLineLength(ICSSNode node, StringBuffer source) { - if (node == null || source == null) - return 0; - String delim = getLineDelimiter(node); - String str = new String(source); - int n = str.lastIndexOf(delim); - if (n < 0) - return str.length(); - - return str.length() - n - delim.length(); - } - - /** - * - * @return int - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param insertPos - * int - */ - public int getLengthToReformatAfter(ICSSNode node, int insertPos) { - if (node == null) - return 0; - IndexedRegion nnode = (IndexedRegion) node; - if (insertPos < 0 || !nnode.contains(insertPos)) - return 0; - - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(insertPos); - if (flatNode == null) - return 0; - ITextRegion region = flatNode.getRegionAtCharacterOffset(insertPos); - if (region == null) - return 0; - RegionIterator it = new RegionIterator(flatNode, region); - boolean found = false; - while (it.hasNext()) { - region = it.next(); - // if (region.getType() != CSSRegionContexts.CSS_S && - // region.getType() != CSSRegionContexts.CSS_DELIMITER && - // region.getType() != - // CSSRegionContexts.CSS_DECLARATION_DELIMITER) { - if (region.getType() != CSSRegionContexts.CSS_S) { - found = true; - break; - } - } - int pos = (found ? it.getStructuredDocumentRegion().getStartOffset(region) : it.getStructuredDocumentRegion().getTextEndOffset(region)) - insertPos; - return (pos >= 0) ? pos : 0; - } - - /** - * - * @return int - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param insertPos - * int - */ - public int getLengthToReformatBefore(ICSSNode node, int insertPos) { - if (node == null) - return 0; - IndexedRegion nnode = (IndexedRegion) node; - if (insertPos <= 0 || !nnode.contains(insertPos - 1)) - return 0; - - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(insertPos - 1); - if (flatNode == null) - return 0; - ITextRegion region = flatNode.getRegionAtCharacterOffset(insertPos - 1); - if (region == null) - return 0; - RegionIterator it = new RegionIterator(flatNode, region); - boolean found = false; - while (it.hasPrev()) { - region = it.prev(); - // if (region.getType() != CSSRegionContexts.CSS_S && - // region.getType() != CSSRegionContexts.CSS_DELIMITER && - // region.getType() != - // CSSRegionContexts.CSS_DECLARATION_DELIMITER) { - if (region.getType() != CSSRegionContexts.CSS_S) { - found = true; - break; - } - } - int pos = insertPos - (found ? it.getStructuredDocumentRegion().getTextEndOffset(region) : it.getStructuredDocumentRegion().getStartOffset(region)); - // flatNode = it.getStructuredDocumentRegion(); - // if (found) { - // if (region.getLength() != region.getTextLength()) { - // pos = insertPos - flatNode.getTextEndOffset(region); - // } else { - // pos = insertPos - flatNode.getEndOffset(region); - // } - // } else { - // pos = insertPos - flatNode.getStartOffset(region); - // } - return (pos >= 0) ? pos : 0; - } - - /** - * - */ - String getLineDelimiter(ICSSNode node) { - ICSSModel model = (node != null) ? node.getOwnerDocument().getModel() : null; - return (model != null) ? model.getStructuredDocument().getLineDelimiter() : "\n"; //$NON-NLS-1$ - - // TODO : check whether to use model.getLineDelimiter() or - // model.getStructuredDocument().getLineDelimiter() - } - - /** - * - */ - protected CompoundRegion[] getOutsideRegions(IStructuredDocument model, IRegion reg) { - CompoundRegion[] ret = new CompoundRegion[2]; - RegionIterator it = new RegionIterator(model, reg.getOffset()); - it.prev(); - if (it.hasPrev()) { - ITextRegion textRegion = it.prev(); - IStructuredDocumentRegion documentRegion = it.getStructuredDocumentRegion(); - ret[0] = new CompoundRegion(documentRegion, textRegion); - } - else { - ret[0] = null; - } - it.reset(model, reg.getOffset() + reg.getLength()); - if (it.hasNext()) { - ITextRegion textRegion = it.next(); - IStructuredDocumentRegion documentRegion = it.getStructuredDocumentRegion(); - ret[1] = new CompoundRegion(documentRegion, textRegion); - } - else { - ret[1] = null; - } - return ret; - } - - /** - */ - protected CSSSourceGenerator getParentFormatter(ICSSNode node) { - ICSSNode parent = node.getParentNode(); - if (parent != null) { - CSSSourceGenerator formatter = (CSSSourceGenerator) ((INodeNotifier) parent).getAdapterFor(CSSSourceFormatter.class); - if (formatter == null) { - formatter = CSSSourceFormatterFactory.getInstance().getSourceFormatter((INodeNotifier) parent); - } - return formatter; - } - return null; - } - - /** - * - */ - protected CompoundRegion[] getRegions(IStructuredDocument model, IRegion reg, IRegion exceptFor, String pickupType) { - int start = reg.getOffset(); - int end = reg.getOffset() + reg.getLength(); - int startE = (exceptFor != null) ? exceptFor.getOffset() : -1; - int endE = (exceptFor != null) ? exceptFor.getOffset() + exceptFor.getLength() : 0; - - ArrayList list = new ArrayList(); - IStructuredDocumentRegion flatNode = model.getRegionAtCharacterOffset(start); - boolean pickuped = false; - while (flatNode != null && flatNode.getStartOffset() < end) { - ITextRegionList regionList = flatNode.getRegions(); - Iterator it = regionList.iterator(); - while (it.hasNext()) { - ITextRegion region = (ITextRegion) it.next(); - if (flatNode.getStartOffset(region) < start) - continue; - if (end <= flatNode.getStartOffset(region)) - break; - if (startE >= 0 && startE <= flatNode.getStartOffset(region) && flatNode.getEndOffset(region) <= endE) - continue; - if (region.getType() == CSSRegionContexts.CSS_COMMENT || region.getType() == CSSRegionContexts.CSS_CDC || region.getType() == CSSRegionContexts.CSS_CDO) - list.add(new CompoundRegion(flatNode, region)); - else if (!pickuped && region.getType() == pickupType) { - list.add(new CompoundRegion(flatNode, region)); - pickuped = true; - } - } - flatNode = flatNode.getNext(); - } - if (list.size() > 0) { - CompoundRegion[] regions = new CompoundRegion[list.size()]; - list.toArray(regions); - return regions; - } - return new CompoundRegion[0]; - } - - /** - * - */ - protected CompoundRegion[] getRegionsWithoutWhiteSpaces(IStructuredDocument model, IRegion reg, CSSCleanupStrategy stgy) { - int start = reg.getOffset(); - int end = reg.getOffset() + reg.getLength() - 1; - ArrayList list = new ArrayList(); - IStructuredDocumentRegion flatNode = model.getRegionAtCharacterOffset(start); - while (flatNode != null && flatNode.getStartOffset() <= end) { - ITextRegionList regionList = flatNode.getRegions(); - Iterator it = regionList.iterator(); - while (it.hasNext()) { - ITextRegion region = (ITextRegion) it.next(); - if (flatNode.getStartOffset(region) < start) - continue; - if (end < flatNode.getStartOffset(region)) - break; - if (region.getType() != CSSRegionContexts.CSS_S || (isCleanup() && !stgy.isFormatSource())) // for - // not - // formatting - // case - // on - // cleanup - // action - list.add(new CompoundRegion(flatNode, region)); - } - flatNode = flatNode.getNext(); - } - if (list.size() > 0) { - CompoundRegion[] regions = new CompoundRegion[list.size()]; - list.toArray(regions); - return regions; - } - return new CompoundRegion[0]; - } - - /** - * - */ - public static boolean includes(IRegion region, int start, int end) { - if (region == null) - return false; - - return (region.getOffset() <= start) && (end <= region.getOffset() + region.getLength()); - } - - /** - * - * @return boolean - */ - protected static boolean isCleanup() { - return strategy == CLEANUP; - } - - /** - * - * @return boolean - */ - protected static boolean isFormat() { - return strategy == FORMAT; - } - - /** - * - */ - protected boolean isIncludesPreEnd(ICSSNode node, IRegion region) { - return (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getStartOffset() == (region.getOffset() + region.getLength())); - } - - /** - * - */ - static protected boolean needS(CompoundRegion region) { - return (region != null && region.getType() != CSSRegionContexts.CSS_S); - } - - /** - * - */ - public static IRegion overlappedRegion(IRegion region, int start, int end) { - if (overlaps(region, start, end)) { - int offset = (region.getOffset() <= start) ? start : region.getOffset(); - int length = ((end <= region.getOffset() + region.getLength()) ? end : region.getOffset() + region.getLength()) - offset; - return new FormatRegion(offset, length); - } - return null; - } - - /** - * - */ - public static boolean overlaps(IRegion region, int start, int end) { - if (region == null) - return false; - - return (start < region.getOffset() + region.getLength()) && (region.getOffset() < end); - } - - private String getIndentString() { - StringBuffer indent = new StringBuffer(); - - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - if (preferences != null) { - char indentChar = ' '; - String indentCharPref = preferences.getString(CSSCorePreferenceNames.INDENTATION_CHAR); - if (CSSCorePreferenceNames.TAB.equals(indentCharPref)) { - indentChar = '\t'; - } - int indentationWidth = preferences.getInt(CSSCorePreferenceNames.INDENTATION_SIZE); - - for (int i = 0; i < indentationWidth; i++) { - indent.append(indentChar); - } - } - return indent.toString(); - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AttrChangeContext.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AttrChangeContext.java deleted file mode 100644 index 924a73e7b6..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AttrChangeContext.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -/** - * - */ -public class AttrChangeContext { - - public int start, end; - - /** - * - */ - public AttrChangeContext() { - super(); - start = end = 0; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AttrFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AttrFormatter.java deleted file mode 100644 index 6401d4111d..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/AttrFormatter.java +++ /dev/null @@ -1,168 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSCharsetRule; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSImportRule; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSPageRule; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclItem; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleRule; -import org.eclipse.wst.css.core.internal.util.CSSUtil; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; - - -/** - * - */ -public class AttrFormatter extends DefaultCSSSourceFormatter { - - private static AttrFormatter instance; - - /** - * - */ - AttrFormatter() { - super(); - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - ICSSAttr attr = (ICSSAttr) node; - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int end = ((IndexedRegion) node).getEndOffset(); - if (end > 0) { // format source - int start = ((IndexedRegion) node).getStartOffset(); - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - - if (attr.getName().equals(ICSSStyleRule.SELECTOR) || attr.getName().equals(ICSSPageRule.SELECTOR)) { - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBetween(node, regions[i - 1], regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - } - else if (attr.getName().equals(ICSSImportRule.HREF)) { - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - } - else if (attr.getName().equals(ICSSCharsetRule.ENCODING)) { - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - } - else if (attr.getName().equals(ICSSStyleDeclItem.IMPORTANT)) { - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - } - else if (attr.getName() == null || attr.getName().length() == 0) { - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - } - else { - // counter attributes - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - } - } - else { // generate source - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - - String value = attr.getValue(); - if (value == null) - value = "";//$NON-NLS-1$ - if (attr.getName().equals(ICSSStyleRule.SELECTOR) || attr.getName().equals(ICSSPageRule.SELECTOR)) { - } - else if (attr.getName().equals(ICSSImportRule.HREF)) { - String uri = org.eclipse.wst.css.core.internal.util.CSSLinkConverter.stripFunc(value); - String func = preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER ? "URL(" : "url(";//$NON-NLS-2$//$NON-NLS-1$ - if (preferences.getBoolean(CSSCorePreferenceNames.FORMAT_QUOTE_IN_URI)) { - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - quote = CSSUtil.detectQuote(uri, quote); - value = func + quote + uri + quote + ")";//$NON-NLS-1$ - } - else { - value = func + uri + ")";//$NON-NLS-1$ - } - } - else if (attr.getName().equals(ICSSCharsetRule.ENCODING)) { - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - if (!value.startsWith("\"") && !value.startsWith("\'"))//$NON-NLS-2$//$NON-NLS-1$ - value = quote + value; - if (!value.endsWith("\"") && !value.endsWith("\'"))//$NON-NLS-2$//$NON-NLS-1$ - value = value + quote; - } - else if (attr.getName().equals(ICSSStyleDeclItem.IMPORTANT)) { - if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER) - value = value.toUpperCase(); - else - value = value.toLowerCase(); - } - else if (attr.getName() == null || attr.getName().length() == 0) { - if (CSSCorePlugin.getDefault().getPluginPreferences().getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER) - value = value.toUpperCase(); - else - value = value.toLowerCase(); - } - else { - if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER) - value = value.toUpperCase(); - else - value = value.toLowerCase(); - } - source.append(value); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - formatPre(node, source); - } - - /** - * - */ - public synchronized static AttrFormatter getInstance() { - if (instance == null) { - instance = new AttrFormatter(); - } - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSFormatUtil.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSFormatUtil.java deleted file mode 100644 index 4d2dc00016..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSFormatUtil.java +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************* - * 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.formatter; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.wst.css.core.internal.provisional.adapters.ICSSModelAdapter; -import org.eclipse.wst.css.core.internal.provisional.adapters.IStyleDeclarationAdapter; -import org.eclipse.wst.css.core.internal.provisional.adapters.IStyleSheetAdapter; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.w3c.dom.Node; -import org.w3c.dom.Text; - - -public class CSSFormatUtil { - public List collectCSSNodes(IStructuredModel model, int start, int length) { - List nodes = new ArrayList(); - - IndexedRegion startNode = model.getIndexedRegion(start); - IndexedRegion endNode = model.getIndexedRegion(start + length - 1); - - if (startNode == null || endNode == null) { - return nodes; - } - - if (model instanceof ICSSModel && startNode instanceof ICSSNode && endNode instanceof ICSSNode) { - // CSS model - ICSSNode ca = getCommonAncestor((ICSSNode) startNode, (ICSSNode) endNode); - if (ca != null) { - for (ICSSNode node = ca.getFirstChild(); node != null && start + length < ((IndexedRegion) node).getStartOffset(); node = node.getNextSibling()) { - if (start < ((IndexedRegion) node).getEndOffset()) { - nodes.add(node); - } - } - } - } - else if (model instanceof IDOMModel && startNode instanceof IDOMNode && endNode instanceof IDOMNode) { - if (startNode instanceof Text) { - startNode = (IndexedRegion) ((Text) startNode).getParentNode(); - } - if (endNode instanceof Text) { - endNode = (IndexedRegion) ((Text) endNode).getParentNode(); - } - // HTML model, maybe - IDOMNode ca = (IDOMNode) getCommonAncestor((Node) startNode, (Node) endNode); - findCSS(nodes, ca); - } - - return nodes; - } - - /** - * getCommonAncestor method - * - * @return org.w3c.dom.Node - * @param node - * org.w3c.dom.Node - */ - private Node getCommonAncestor(Node node1, Node node2) { - if (node1 == null || node2 == null) - return null; - - for (Node na = node2; na != null; na = na.getParentNode()) { - for (Node ta = node1; ta != null; ta = ta.getParentNode()) { - if (ta == na) - return ta; - } - } - return null; // not found - } - - private void findCSS(List cssNodes, IDOMNode node) { - ICSSModelAdapter adapter; - adapter = (ICSSModelAdapter) node.getAdapterFor(IStyleSheetAdapter.class); - if (adapter != null) { - ICSSModel model = adapter.getModel(); - if (model != null && model.getStyleSheetType() == ICSSModel.EMBEDDED) { - cssNodes.add(model.getDocument()); - } - } - else { - adapter = (ICSSModelAdapter) node.getAdapterFor(IStyleDeclarationAdapter.class); - if (adapter != null) { - ICSSModel model = adapter.getModel(); - if (model != null && model.getStyleSheetType() == ICSSModel.INLINE) { - cssNodes.add(model.getDocument()); - } - } - } - - for (IDOMNode child = (IDOMNode) node.getFirstChild(); child != null; child = (IDOMNode) child.getNextSibling()) { - findCSS(cssNodes, child); - } - } - - private ICSSNode getCommonAncestor(ICSSNode nodeA, ICSSNode nodeB) { - if (nodeA == null || nodeB == null) { - return null; - } - - for (ICSSNode na = nodeA; na != null; na = na.getParentNode()) { - for (ICSSNode ta = nodeB; ta != null; ta = ta.getParentNode()) { - if (ta == na) { - return ta; - } - } - } - - return null; // not found - } - - /** - */ - public void replaceSource(IStructuredModel model, int offset, int length, String source) { - if (model == null) - return; - IStructuredDocument structuredDocument = model.getStructuredDocument(); - if (structuredDocument == null) - return; - if (offset >= 0 && length >= 0 && offset + length <= structuredDocument.getLength()) { - if (structuredDocument.containsReadOnly(offset, length)) - return; - if (source == null) - source = new String(); - // We use 'structuredDocument' as the requester object just so - // this and the other - // format-related 'repalceText' (in replaceSource) can use the - // same requester. - // Otherwise, if requester is not identical, - // the undo group gets "broken" into multiple pieces based - // on the requesters being different. Technically, any unique, - // common - // requester object would work. - structuredDocument.replaceText(structuredDocument, offset, length, source); - } - } - - public synchronized static CSSFormatUtil getInstance() { - if (fInstance == null) { - fInstance = new CSSFormatUtil(); - } - return fInstance; - } - - private CSSFormatUtil() { - super(); - } - - private static CSSFormatUtil fInstance; -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceFormatter.java deleted file mode 100644 index 4a9af068a9..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceFormatter.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; - - -/** - * - */ -public interface CSSSourceFormatter { - - /** - * - */ - StringBuffer cleanup(ICSSNode node); - - /** - * - * @return java.lang.StringBuffer - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param region - * org.eclipse.jface.text.IRegion - */ - StringBuffer cleanup(ICSSNode node, IRegion region); - - /** - * - */ - StringBuffer format(ICSSNode node); - - /** - * - */ - StringBuffer format(ICSSNode node, IRegion region); -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceFormatterFactory.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceFormatterFactory.java deleted file mode 100644 index e3bf59663c..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceFormatterFactory.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * 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.formatter; - -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; - - -/** - * - */ -public class CSSSourceFormatterFactory { - /** - * - */ - private CSSSourceFormatterFactory() { - super(); - } - - /** - * - */ - public CSSSourceGenerator getSourceFormatter(INodeNotifier target) { - ICSSNode node = (ICSSNode) target; - short type = node.getNodeType(); - switch (type) { - case ICSSNode.CHARSETRULE_NODE : - return CharsetRuleFormatter.getInstance(); - case ICSSNode.FONTFACERULE_NODE : - return FontFaceRuleFormatter.getInstance(); - case ICSSNode.IMPORTRULE_NODE : - return ImportRuleFormatter.getInstance(); - case ICSSNode.MEDIALIST_NODE : - return MediaListFormatter.getInstance(); - case ICSSNode.MEDIARULE_NODE : - return MediaRuleFormatter.getInstance(); - case ICSSNode.PRIMITIVEVALUE_NODE : - ICSSPrimitiveValue value = (ICSSPrimitiveValue) node; - if (value.getPrimitiveType() == org.w3c.dom.css.CSSPrimitiveValue.CSS_COUNTER) - return CounterFormatter.getInstance(); - else if (value.getPrimitiveType() == org.w3c.dom.css.CSSPrimitiveValue.CSS_RECT) - return RectFormatter.getInstance(); - else if (value.getPrimitiveType() == org.w3c.dom.css.CSSPrimitiveValue.CSS_RGBCOLOR) - return RGBFormatter.getInstance(); - else - return PrimitiveValueFormatter.getInstance(); - case ICSSNode.PAGERULE_NODE : - return PageRuleFormatter.getInstance(); - case ICSSNode.STYLEDECLARATION_NODE : - return StyleDeclarationFormatter.getInstance(); - case ICSSNode.STYLEDECLITEM_NODE : - return StyleDeclItemFormatter.getInstance(); - case ICSSNode.STYLERULE_NODE : - return StyleRuleFormatter.getInstance(); - case ICSSNode.STYLESHEET_NODE : - return StyleSheetFormatter.getInstance(); - case ICSSNode.ATTR_NODE : - return AttrFormatter.getInstance(); - default : - return UnknownRuleFormatter.getInstance(); - } - } - - public synchronized static CSSSourceFormatterFactory getInstance() { - if (fInstance == null) { - fInstance = new CSSSourceFormatterFactory(); - } - return fInstance; - } - - private static CSSSourceFormatterFactory fInstance; -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceGenerator.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceGenerator.java deleted file mode 100644 index edfe8cb079..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CSSSourceGenerator.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; - - -public interface CSSSourceGenerator extends CSSSourceFormatter { - - /** - * - */ - StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext region); - - /** - * - */ - StringBuffer formatBefore(ICSSNode node, ICSSNode child, IRegion exceptFor); - - /** - * - */ - int getAttrInsertPos(ICSSNode node, String attrName); - - /** - * - */ - int getChildInsertPos(ICSSNode node); - - /** - * - * @return int - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param insertPos - * int - */ - int getLengthToReformatAfter(ICSSNode node, int insertPos); - - /** - * - * @return int - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param insertPos - * int - */ - int getLengthToReformatBefore(ICSSNode node, int insertPos); -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CharsetRuleFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CharsetRuleFormatter.java deleted file mode 100644 index 7190fc9880..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CharsetRuleFormatter.java +++ /dev/null @@ -1,184 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSCharsetRule; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.util.CSSUtil; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class CharsetRuleFormatter extends DefaultCSSSourceFormatter { - - public final static java.lang.String CHARSET = "@charset";//$NON-NLS-1$ - private static CharsetRuleFormatter instance; - - /** - * - */ - CharsetRuleFormatter() { - super(); - } - - /** - * - */ - public StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext context) { - StringBuffer buf = new StringBuffer(); - if (node == null || attr == null) - return buf; - - if (!ICSSCharsetRule.ENCODING.equalsIgnoreCase(attr.getName())) - return buf; - - // get region to replace - if (context != null && ((IndexedRegion) node).getEndOffset() > 0) { - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) attr).getStartOffset()); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) attr).getStartOffset()); - RegionIterator it = new RegionIterator(flatNode, region); - it.prev(); - if (it.hasPrev()) { - ITextRegion prev = it.prev(); - if (prev.getType() == CSSRegionContexts.CSS_S) - context.start = it.getStructuredDocumentRegion().getStartOffset(prev); - else - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - } else - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - } else { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) node).getEndOffset() - 1); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) node).getEndOffset() - 1); - if (region.getType() == CSSRegionContexts.CSS_S) { - context.start = flatNode.getStartOffset(region); - context.end = flatNode.getStartOffset(region); - } else { - context.start = flatNode.getEndOffset() + 1; - context.end = flatNode.getEndOffset(); - } - } - } - // generate text - if (insert) { - appendSpaceBefore(node, attr.getValue(), buf); - buf.append(attr.getValue()); - } - return buf; - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - int end = ((IndexedRegion) node).getEndOffset(); - if (end > 0) { // format source - int start = ((IndexedRegion) node).getStartOffset(); - formatPre(node, new FormatRegion(start, end - start), source); - } else { // generate source - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - String str = CHARSET; - if (preferences.getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER) - str = CHARSET.toUpperCase(); - source.append(str); - String enc = ((ICSSCharsetRule) node).getEncoding(); - quote = CSSUtil.detectQuote(enc, quote); - str = quote + ((enc != null) ? enc : "") + quote + ";";//$NON-NLS-1$ //$NON-NLS-2$ - appendSpaceBefore(node, str, source); - source.append(str); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if ((i != 0 || needS(outside[0])) && !regions[i].getType().equals(CSSRegionContexts.CSS_DELIMITER)) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - if (needS(outside[1]) && !isIncludesPreEnd(node, region)) - appendSpaceBefore(node, outside[1], source); - } - - /** - * - */ - public int getAttrInsertPos(ICSSNode node, String attrName) { - if (node == null || attrName == null || attrName.length() == 0) - return -1; - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - if (!ICSSCharsetRule.ENCODING.equalsIgnoreCase(attrName)) - return -1; - - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICSSCharsetRule.ENCODING); - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - IndexedRegion iNode = (IndexedRegion) node; - if (iNode.getEndOffset() <= 0) - return -1; - - CompoundRegion regions[] = getRegionsWithoutWhiteSpaces(node.getOwnerDocument().getModel().getStructuredDocument(), new FormatRegion(iNode.getStartOffset(), iNode.getEndOffset() - iNode.getStartOffset()), stgy); - for (int i = regions.length - 1; i >= 0; i--) { - if (regions[i].getType() != CSSRegionContexts.CSS_COMMENT) - return regions[i].getStartOffset(); - } - return iNode.getEndOffset(); - } - - /** - * - */ - public int getChildInsertPos(ICSSNode node) { - int n = ((IndexedRegion) node).getEndOffset(); - if (n > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); - if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_DELIMITER) - return n - 1; - return n; - } - return -1; - } - - /** - * - */ - public synchronized static CharsetRuleFormatter getInstance() { - if (instance == null) - instance = new CharsetRuleFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CompoundRegion.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CompoundRegion.java deleted file mode 100644 index 9b3c8ff71e..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CompoundRegion.java +++ /dev/null @@ -1,52 +0,0 @@ -/******************************************************************************* - * 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.formatter; - -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - -class CompoundRegion { - - CompoundRegion(IStructuredDocumentRegion documentRegion, ITextRegion textRegion) { - super(); - this.fDocumentRegion = documentRegion; - this.fTextRegion = textRegion; - } - - IStructuredDocumentRegion getDocumentRegion() { - return fDocumentRegion; - } - - ITextRegion getTextRegion() { - return fTextRegion; - } - - String getType() { - return fTextRegion.getType(); - } - - String getText() { - return fDocumentRegion.getText(fTextRegion); - } - - int getStartOffset() { - return fDocumentRegion.getStartOffset(fTextRegion); - } - - int getEndOffset() { - return fDocumentRegion.getEndOffset(fTextRegion); - } - - - private IStructuredDocumentRegion fDocumentRegion; - private ITextRegion fTextRegion; - -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CounterFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CounterFormatter.java deleted file mode 100644 index 331dd1b0dd..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/CounterFormatter.java +++ /dev/null @@ -1,319 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.provisional.document.ICounter; -import org.eclipse.wst.css.core.internal.util.CSSUtil; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class CounterFormatter extends DefaultCSSSourceFormatter { - - private static CounterFormatter instance; - - /** - * - */ - CounterFormatter() { - super(); - } - - /** - * - */ - public StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext context) { - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - - StringBuffer source = new StringBuffer(); - if (node == null || attr == null) - return source; - - if (!ICounter.IDENTIFIER.equalsIgnoreCase(attr.getName()) && !ICounter.LISTSTYLE.equalsIgnoreCase(attr.getName()) && !ICounter.SEPARATOR.equalsIgnoreCase(attr.getName())) - return source; - - // get region to replace - IndexedRegion iNode = (IndexedRegion) node; - context.start = iNode.getStartOffset(); - context.end = iNode.getEndOffset(); - - ICounter counter = (ICounter) node; - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - String sep = counter.getSeparator(); - String ident = counter.getIdentifier(); - String style = counter.getListStyle(); - - if (ICounter.IDENTIFIER.equalsIgnoreCase(attr.getName())) { - if (insert) - ident = attr.getValue(); - else - ident = "";//$NON-NLS-1$ - } - else if (ICounter.LISTSTYLE.equalsIgnoreCase(attr.getName())) { - if (insert) - style = attr.getValue(); - else - style = null; - } - else if (ICounter.SEPARATOR.equalsIgnoreCase(attr.getName())) { - if (insert) - sep = attr.getValue(); - else - sep = null; - } - - quote = CSSUtil.detectQuote(sep, quote); - sep = (sep == null || sep.length() == 0) ? null : (quote + sep + quote); - - String func = (sep == null || sep.length() == 0) ? "counter(" : "counters(";//$NON-NLS-2$//$NON-NLS-1$ - if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER) { - ident = ident.toUpperCase(); - style = style.toUpperCase(); - func = func.toUpperCase(); - } - else { - ident = ident.toLowerCase(); - style = style.toLowerCase(); - } - if (sep == null || sep.length() == 0) { - source.append(func); - appendSpaceBefore(node, ident, source); - source.append(ident); - } - else { - source.append(func); - appendSpaceBefore(node, ident, source); - source.append(ident); - source.append(",");//$NON-NLS-1$ - appendSpaceBefore(node, sep, source); - source.append(sep); - } - - if (style != null && style.length() != 0) { - source.append(",");//$NON-NLS-1$ - appendSpaceBefore(node, style, source); - } - source.append(")");//$NON-NLS-1$ - - /* - * IStructuredDocument structuredDocument = - * node.getOwnerDocument().getModel().getStructuredDocument(); - * ITextRegion[] regions = - * getRegionsWithoutWhiteSpaces(structuredDocument, new - * FormatRegion(context.start, context.end - context.start + 1)); int - * commas[2]; int numComma = 0; for(int j = 0; j <regions.length; j++) { - * if (regions[j].getType() == CSSRegionContexts.COMMA) { - * commas[numComma++] = j; if (numComma > 1) break; } } - * - * if (ICounter.IDENTIFIER.equalsIgnoreCase(attr.getName())) { } else - * if (ICounter.LISTSTYLE.equalsIgnoreCase(attr.getName())) { } else - * if (ICounter.SEPARATOR.equalsIgnoreCase(attr.getName())) { boolean - * skipSpace = false; String func = insert ? "counters(" : "counter("; - * if (mgr.isPropValueUpperCase()) func = func.toUpperCase(); - * - * for(int i=0; i <regions.length; i++) { if (regions[i].getType() == - * CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) - * source.append(func); else { if (numComma == 2 && commas[1] < i) { - * } else if (numComma == 1 && commas[0] < i && insert) { - * } else if (numComma == 1 && commas[0] < i && ! insert) { } else if - * (numComma == 0 && insert && regions[i].getType == - * CSSRegionContexts.PARENTHESIS_CLOSE) { source.append(","); - * appendSpaceBefore(node,attr.getValue(),source); - * source.append(attr.getValue()); } - * - * if (i != 0 && !skipSpace) - * appendSpaceBefore(node,regions[i],source); - * source.append(decoratedPropValueRegion(regions[i])); } skipSpace = - * false; - * - * if (regions[i].getType() == - * CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) skipSpace = true; } } - */ - return source; - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - int start = ((IndexedRegion) node).getStartOffset(); - int end = ((IndexedRegion) node).getEndOffset(); - - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - if (end > 0) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - boolean skipSpace = false; - for (int i = 0; i < regions.length; i++) { - if (i != 0 && !skipSpace) - appendSpaceBefore(node, regions[i], source); - skipSpace = false; - source.append(decoratedPropValueRegion(regions[i], stgy)); - if (regions[i].getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) - skipSpace = true; - } - } - else { // generate source - ICounter counter = (ICounter) node; - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - String separator = counter.getSeparator(); - quote = CSSUtil.detectQuote(separator, quote); - String sep = (separator == null || separator.length() == 0) ? null : (quote + separator + quote); - String ident = counter.getIdentifier(); - String style = counter.getListStyle(); - String func = (sep == null || sep.length() == 0) ? "counter(" : "counters(";//$NON-NLS-2$//$NON-NLS-1$ - // normalize - if (ident == null) - ident = "";//$NON-NLS-1$ - if (style == null) - style = "";//$NON-NLS-1$ - - if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER) { - ident = ident.toUpperCase(); - style = style.toUpperCase(); - func = func.toUpperCase(); - } - else { - ident = ident.toLowerCase(); - style = style.toLowerCase(); - } - if (sep == null || sep.length() == 0) { - source.append(func); - appendSpaceBefore(node, ident, source); - source.append(ident); - } - else { - source.append(func); - appendSpaceBefore(node, ident, source); - source.append(ident); - source.append(",");//$NON-NLS-1$ - appendSpaceBefore(node, sep, source); - source.append(sep); - } - - if (style != null && style.length() != 0) { - source.append(",");//$NON-NLS-1$ - appendSpaceBefore(node, style, source); - } - source.append(")");//$NON-NLS-1$ - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - if (needS(outside[1]) && !isIncludesPreEnd(node, region)) - appendSpaceBefore(node, outside[1], source); - } - - /** - * - */ - public int getAttrInsertPos(ICSSNode node, String attrName) { - if (node == null || attrName == null || attrName.length() == 0) - return -1; - - IndexedRegion iNode = (IndexedRegion) node; - if (ICounter.IDENTIFIER.equalsIgnoreCase(attrName)) { - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICounter.IDENTIFIER); - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - if (iNode.getEndOffset() <= 0) - return -1; - - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(iNode.getEndOffset() - 1); - RegionIterator it = new RegionIterator(flatNode, flatNode.getRegionAtCharacterOffset(iNode.getEndOffset() - 1)); - while (it.hasPrev()) { - ITextRegion region = it.prev(); - if (region.getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) - return it.getStructuredDocumentRegion().getEndOffset(region); - } - return ((IndexedRegion) node).getEndOffset(); - } - else if (ICounter.LISTSTYLE.equalsIgnoreCase(attrName)) { - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICounter.LISTSTYLE); - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(iNode.getEndOffset() - 1); - RegionIterator it = new RegionIterator(flatNode, flatNode.getRegionAtCharacterOffset(iNode.getEndOffset() - 1)); - while (it.hasPrev()) { - ITextRegion region = it.prev(); - if (region.getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_OPERATOR) - return it.getStructuredDocumentRegion().getEndOffset(region); - else if (region.getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) - return it.getStructuredDocumentRegion().getEndOffset(region); - } - return ((IndexedRegion) node).getEndOffset(); - } - else if (ICounter.SEPARATOR.equalsIgnoreCase(attrName)) { - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICounter.SEPARATOR); - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(iNode.getEndOffset() - 1); - RegionIterator it = new RegionIterator(flatNode, flatNode.getRegionAtCharacterOffset(iNode.getEndOffset() - 1)); - boolean hasComma = false; - while (it.hasPrev()) { - ITextRegion region = it.prev(); - if (region.getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_OPERATOR) { - if (!hasComma) - hasComma = true; - else - return it.getStructuredDocumentRegion().getEndOffset(region); - } - else if (region.getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) - return it.getStructuredDocumentRegion().getEndOffset(region); - } - return ((IndexedRegion) node).getEndOffset(); - } - else - return -1; - } - - /** - * - */ - public synchronized static CounterFormatter getInstance() { - if (instance == null) - instance = new CounterFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DeclContainerFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DeclContainerFormatter.java deleted file mode 100644 index 7fff44bd8b..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DeclContainerFormatter.java +++ /dev/null @@ -1,114 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; - - -/** - * - */ -public class DeclContainerFormatter extends DefaultCSSSourceFormatter { - - /** - * - */ - DeclContainerFormatter() { - super(); - } - - /** - * - * @return java.lang.String - */ - protected String decoratedSelectorRegion(CompoundRegion region, CompoundRegion prevRegion, CSSCleanupStrategy stgy) { - String text = region.getText(); - if (isFormat()) - return text; - - String type = region.getType(); - if (type == CSSRegionContexts.CSS_SELECTOR_ATTRIBUTE_NAME || type == CSSRegionContexts.CSS_SELECTOR_ATTRIBUTE_VALUE || type == CSSRegionContexts.CSS_SELECTOR_CLASS || type == CSSRegionContexts.CSS_SELECTOR_ELEMENT_NAME || type == CSSRegionContexts.CSS_SELECTOR_ID || type == CSSRegionContexts.CSS_SELECTOR_PSEUDO) { - short selCase = stgy.getSelectorTagCase(); - if (selCase == org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy.UPPER) { - return text.toUpperCase(); - } - else if (selCase == org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy.LOWER) { - return text.toLowerCase(); - } - return text; - } - - return decoratedRegion(region, 0, stgy); - } - - /** - * - */ - protected void formatPost(ICSSNode node, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int end = ((IndexedRegion) node).getEndOffset(); - int start = (node.getLastChild() != null && ((IndexedRegion) node.getLastChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getLastChild()).getEndOffset() : getChildInsertPos(node); - if (end > 0 && start < end) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - } - else { // generate source - String delim = getLineDelimiter(node); - source.append(delim); - source.append(getIndent(node)); - source.append("}");//$NON-NLS-1$ - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - } - - /** - * - */ - public int getChildInsertPos(ICSSNode node) { - int n = ((IndexedRegion) node).getEndOffset(); - if (n > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); - if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_RBRACE) - return n - 1; - else - return n; - } - return -1; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DefaultCSSSourceFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DefaultCSSSourceFormatter.java deleted file mode 100644 index c1aed20bbf..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/DefaultCSSSourceFormatter.java +++ /dev/null @@ -1,126 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -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.provisional.document.ICSSNode; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; - - -/** - * - */ -public class DefaultCSSSourceFormatter extends AbstractCSSSourceFormatter { - - /** - * - */ - DefaultCSSSourceFormatter() { - super(); - } - - /** - * - */ - protected void appendSpaceBetween(ICSSNode node, CompoundRegion prev, CompoundRegion next, StringBuffer source) { - if (isCleanup() && !getCleanupStrategy(node).isFormatSource()) - return; // for not formatting case on cleanup action - - // in selector - String prevType = prev.getType(); - String nextType = next.getType(); - if (CSSRegionUtil.isSelectorBegginingType(prevType) && CSSRegionUtil.isSelectorBegginingType(nextType)) { - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=73990 - // Formatting CSS file splits element.class into element . class - if ((prevType == CSSRegionContexts.CSS_SELECTOR_ELEMENT_NAME && (nextType == CSSRegionContexts.CSS_SELECTOR_CLASS || nextType == CSSRegionContexts.CSS_SELECTOR_ID)) || ((prevType == CSSRegionContexts.CSS_SELECTOR_ELEMENT_NAME || prevType == CSSRegionContexts.CSS_SELECTOR_CLASS) && nextType == CSSRegionContexts.CSS_SELECTOR_PSEUDO)) { - // Individually, SELECTOR_ELEMENT_NAME, SELECTOR_CLASS, and SELECTOR_ID can all be beginning types. - // But, we should not insert a space in between when SELECTOR_ELEMENT_NAME is followed by SELECTOR_CLASS, or when - // SELECTOR_ELEMENT_NAME is followed by SELECTOR_ID. - // For example: H1.pastoral and H1#z98y - // - // Also, space is now not inserted in between when SELECTOR_ELEMENT_NAME is followed by SELECTOR_PSEUDO, or when - // SELECTOR_CLASS is followed by SELECTOR_PSEUDO. - // For example: P:first-letter and A.external:visited - } - else - appendSpaceBefore(node, next, source); - return; - } - - if (prevType == CSSRegionContexts.CSS_PAGE || prevType == CSSRegionContexts.CSS_CHARSET || prevType == CSSRegionContexts.CSS_ATKEYWORD || prevType == CSSRegionContexts.CSS_FONT_FACE || prevType == CSSRegionContexts.CSS_IMPORT || prevType == CSSRegionContexts.CSS_MEDIA) { - appendSpaceBefore(node, next, source); - return; - } - - if (prevType == CSSRegionContexts.CSS_UNKNOWN && nextType != CSSRegionContexts.CSS_COMMENT) { - if (prev.getEndOffset() != next.getStartOffset()) { // not - // sequential - appendSpaceBefore(node, next, source); - } - return; - } - - if (prevType == CSSRegionContexts.CSS_DECLARATION_VALUE_OPERATOR || prevType == CSSRegionContexts.CSS_COMMENT || nextType == CSSRegionContexts.CSS_COMMENT || nextType == CSSRegionContexts.CSS_LBRACE || nextType == CSSRegionContexts.CSS_UNKNOWN) { - appendSpaceBefore(node, next, source); - return; - } - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, String toAppend, StringBuffer source, IRegion exceptFor) { - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, IRegion region, String toAppend, StringBuffer source) { - } - - /** - * - */ - protected void formatPost(ICSSNode node, StringBuffer source) { - } - - /** - * - */ - protected void formatPost(ICSSNode node, IRegion region, StringBuffer source) { - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - } - - /** - * - */ - public int getChildInsertPos(ICSSNode node) { - int n = ((IndexedRegion) node).getEndOffset(); - if (n > 0) - return n; - return -1; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FontFaceRuleFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FontFaceRuleFormatter.java deleted file mode 100644 index 65a67d3dbf..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FontFaceRuleFormatter.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; - - -/** - * - */ -public class FontFaceRuleFormatter extends DeclContainerFormatter { - - public final static java.lang.String FONT_FACE = "@font-face";//$NON-NLS-1$ - private static FontFaceRuleFormatter instance; - - /** - * - */ - FontFaceRuleFormatter() { - super(); - } - - /** - * - */ - protected void formatPre(org.eclipse.wst.css.core.internal.provisional.document.ICSSNode node, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int start = ((IndexedRegion) node).getStartOffset(); - int end = (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getFirstChild()).getStartOffset() : getChildInsertPos(node); - if (end > 0) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - } - else { - String str = FONT_FACE; - if (CSSCorePlugin.getDefault().getPluginPreferences().getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER) - str = FONT_FACE.toUpperCase(); - source.append(str); - appendSpaceBefore(node, "{", source);//$NON-NLS-1$ - source.append("{");//$NON-NLS-1$ - } - appendDelimBefore(node, null, source); - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - if (needS(outside[1])) { - if (isIncludesPreEnd(node, region)) - appendDelimBefore(node, null, source); - else - appendSpaceBefore(node, outside[1], source); - } - } - - /** - * - */ - public synchronized static FontFaceRuleFormatter getInstance() { - if (instance == null) - instance = new FontFaceRuleFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FormatRegion.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FormatRegion.java deleted file mode 100644 index ff0c9d322a..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FormatRegion.java +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; - -/** - * - */ -class FormatRegion implements IRegion { - - private int fOffset, fLength; - - /** - * - */ - FormatRegion(int offset, int length) { - super(); - set(offset, length); - } - - /** - * Returns the length of the region. - * - * @return the length of the region - */ - public int getLength() { - return fLength; - } - - /** - * Returns the offset of the region. - * - * @return the offset of the region - */ - public int getOffset() { - return fOffset; - } - - /** - * - */ - void set(int offset, int length) { - this.fOffset = offset; - this.fLength = length; - } - - /** - * - */ - void setLength(int newLength) { - fLength = newLength; - } - - /** - * - */ - void setOffset(int newOffset) { - fOffset = newOffset; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FunctionFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FunctionFormatter.java deleted file mode 100644 index 29499ba05f..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/FunctionFormatter.java +++ /dev/null @@ -1,184 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; - - -/** - * - */ -abstract public class FunctionFormatter extends AbstractCSSSourceFormatter { - - /** - * - */ - FunctionFormatter() { - super(); - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, String toAppend, StringBuffer source, IRegion exceptFor) { - ICSSNode prev = (child != null) ? child.getPreviousSibling() : node.getLastChild(); - int start = (prev != null) ? ((IndexedRegion) prev).getEndOffset() : 0; - int end = (child != null) ? ((IndexedRegion) child).getStartOffset() : 0; - if (start > 0 && start < end) { // format source - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - // get meaning regions - CompoundRegion[] regions = null; - if (exceptFor == null) - regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - else { - String pickupType = CSSRegionContexts.CSS_DECLARATION_VALUE_OPERATOR; - if (prev == null || child == null) - pickupType = null; - regions = getRegions(structuredDocument, new FormatRegion(start, end - start), exceptFor, pickupType); - } - // extract source - for (int i = 0; i < regions.length; i++) { - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 2, stgy)); - } - } else if (prev != null && child != null) { // generate source between - // parameters - source.append(",");//$NON-NLS-1$ - } - appendSpaceBefore(node, toAppend, source); - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, IRegion region, String toAppend, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 2, stgy)); - } - } - - /** - * - */ - protected void formatPost(org.eclipse.wst.css.core.internal.provisional.document.ICSSNode node, java.lang.StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int end = ((IndexedRegion) node).getEndOffset(); - int start = (node.getLastChild() != null && ((IndexedRegion) node.getLastChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getLastChild()).getEndOffset() : getChildInsertPos(node); - if (end > 0 && start < end) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 2, stgy)); - } - } else { // generate source - source.append(")");//$NON-NLS-1$ - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 2, stgy)); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - int start = ((IndexedRegion) node).getStartOffset(); - int end = (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getFirstChild()).getStartOffset() : getChildInsertPos(node); - - if (end > 0) { // format source - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - } else { // generate source - String func = getFunc(); - if (CSSCorePlugin.getDefault().getPluginPreferences().getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER) - func = func.toUpperCase(); - source.append(func); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - if (needS(outside[1]) && !isIncludesPreEnd(node, region)) - appendSpaceBefore(node, outside[1], source); - } - - /** - * - */ - public int getChildInsertPos(ICSSNode node) { - int n = ((IndexedRegion) node).getEndOffset(); - if (n > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); - if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE) - return n - 1; - return n; - } - return -1; - } - - /** - * - */ - protected abstract String getFunc(); -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/ImportRuleFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/ImportRuleFormatter.java deleted file mode 100644 index d5d3ef7849..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/ImportRuleFormatter.java +++ /dev/null @@ -1,339 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSImportRule; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.util.CSSUtil; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class ImportRuleFormatter extends AbstractCSSSourceFormatter { - - public final static java.lang.String IMPORT = "@import";//$NON-NLS-1$ - private static ImportRuleFormatter instance; - - /** - * - */ - ImportRuleFormatter() { - super(); - } - - /** - * - */ - public StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext context) { - StringBuffer buf = new StringBuffer(); - if (node == null || attr == null) - return buf; - - if (!ICSSImportRule.HREF.equalsIgnoreCase(attr.getName())) - return buf; - - // get region to replace - if (context != null && ((IndexedRegion) node).getEndOffset() > 0) { - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) attr).getStartOffset()); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) attr).getStartOffset()); - RegionIterator it = new RegionIterator(flatNode, region); - it.prev(); - if (it.hasPrev()) { - ITextRegion prev = it.prev(); - if (prev.getType() == CSSRegionContexts.CSS_S) - context.start = it.getStructuredDocumentRegion().getStartOffset(prev); - else - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - it.next(); - } else - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - it.next(); - it.next(); - if (it.hasNext()) { - ITextRegion next = it.next(); - if (next.getType() == CSSRegionContexts.CSS_S) - context.end = it.getStructuredDocumentRegion().getEndOffset(next); - else - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - } else - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - } else { - ICSSNode child = node.getFirstChild(); - IStructuredDocumentRegion flatNode = null; - ITextRegion region = null; - if (child == null) { - flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) node).getEndOffset() - 1); - region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) node).getEndOffset() - 1); - } else { - flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) child).getStartOffset() - 1); - region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) child).getStartOffset() - 1); - } - if (region.getType() == CSSRegionContexts.CSS_S) { - context.start = flatNode.getStartOffset(region); - context.end = flatNode.getEndOffset(region); - } else { - context.start = flatNode.getEndOffset(); - context.end = flatNode.getEndOffset(); - } - } - } - // generate text - if (insert && attr.getValue() != null && attr.getValue().length() > 0) { - appendSpaceBefore(node, attr.getValue(), buf); - buf.append(attr.getValue()); - appendSpaceBefore(node, "", buf);//$NON-NLS-1$ - } - return buf; - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, String toAppend, StringBuffer source, IRegion exceptFor) { - // for media-type - ICSSNode prev = (child != null) ? child.getPreviousSibling() : node.getLastChild(); - int start = (prev != null) ? ((IndexedRegion) prev).getEndOffset() : 0; - int end = (child != null) ? ((IndexedRegion) child).getStartOffset() : 0; - if (start > 0 && start < end) { // format source - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - // get meaning regions - CompoundRegion[] regions = null; - if (exceptFor == null) - regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - else { - String pickupType = CSSRegionContexts.CSS_MEDIA_SEPARATOR; - if (prev == null || child == null) - pickupType = null; - regions = getRegions(structuredDocument, new FormatRegion(start, end - start), exceptFor, pickupType); - } - // extract source - for (int i = 0; i < regions.length; i++) { - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - } - appendSpaceBefore(node, toAppend, source); - } else if (prev != null && child != null) { // generate source : ???? - source.append(",");//$NON-NLS-1$ - appendSpaceBefore(node, toAppend, source); - } else if (child != null) { // generate source : between 'url()' and - // media types - appendSpaceBefore(node, toAppend, source); - } - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, IRegion region, String toAppend, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must be - // comments - } - if (needS(outside[1])) { - if (((IndexedRegion) child).getStartOffset() == region.getOffset() + region.getLength()) - appendSpaceBefore(node, toAppend, source); - else - appendSpaceBefore(node, outside[1], source); - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int end = ((IndexedRegion) node).getEndOffset(); - int start = (node.getLastChild() != null && ((IndexedRegion) node.getLastChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getLastChild()).getEndOffset() : getChildInsertPos(node); - if (end > 0 && start < end) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - } else { - source.append(";"); //$NON-NLS-1$ - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if ((i != 0 || needS(outside[0])) && !regions[i].getType().equals(CSSRegionContexts.CSS_DELIMITER)) - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - int start = ((IndexedRegion) node).getStartOffset(); - int end = (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getFirstChild()).getStartOffset() : getChildInsertPos(node); - - if (end > 0) { // format source - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - String str = regions[i].getText(); - if (regions[i].getType() == CSSRegionContexts.CSS_IMPORT) - str = decoratedIdentRegion(regions[i], stgy); - else - str = decoratedPropValueRegion(regions[i], stgy); - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(str); - } - } else { // generate source - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - - String str = IMPORT; - if (preferences.getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER) - str = IMPORT.toUpperCase(); - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - source.append(str); - str = "url(";//$NON-NLS-1$ - if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER) - str = str.toUpperCase(); - String href = ((ICSSImportRule) node).getHref(); - quote = CSSUtil.detectQuote(href, quote); - str = str + quote + href + quote + ")";//$NON-NLS-1$ - appendSpaceBefore(node, str, source); - source.append(str); - } - ICSSNode child = node.getFirstChild(); - if (child != null && (child instanceof org.w3c.dom.stylesheets.MediaList) && ((org.w3c.dom.stylesheets.MediaList) child).getLength() > 0) { - appendSpaceBefore(node, "", source);//$NON-NLS-1$ - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - String str = regions[i].getText(); - if (regions[i].getType() == CSSRegionContexts.CSS_IMPORT) - str = decoratedIdentRegion(regions[i], stgy); - else - str = decoratedPropValueRegion(regions[i], stgy); - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(str); - } - if (needS(outside[1]) && !isIncludesPreEnd(node, region)) - appendSpaceBefore(node, outside[1], source); - } - - /** - * - */ - public int getAttrInsertPos(ICSSNode node, String attrName) { - if (node == null || attrName == null || attrName.length() == 0) - return -1; - - if (!ICSSImportRule.HREF.equalsIgnoreCase(attrName)) - return -1; - - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICSSImportRule.HREF); - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - IndexedRegion iNode = (IndexedRegion) node; - if (iNode.getEndOffset() <= 0) - return -1; - - FormatRegion formatRegion = null; - ICSSNode child = node.getFirstChild(); - if (child != null && ((IndexedRegion) child).getEndOffset() > 0) - formatRegion = new FormatRegion(iNode.getStartOffset(), ((IndexedRegion) child).getStartOffset() - iNode.getStartOffset()); - else - formatRegion = new FormatRegion(iNode.getStartOffset(), iNode.getEndOffset() - iNode.getStartOffset()); - CompoundRegion regions[] = getRegionsWithoutWhiteSpaces(node.getOwnerDocument().getModel().getStructuredDocument(), formatRegion, getCleanupStrategy(node)); - - boolean atrule = false; - for (int i = 0; i < regions.length; i++) { - if (regions[i].getType() == CSSRegionContexts.CSS_IMPORT) { - atrule = true; - continue; - } else if (!atrule) - continue; - if (regions[i].getType() != CSSRegionContexts.CSS_COMMENT) - return regions[i].getStartOffset(); - } - return (child != null && ((IndexedRegion) child).getEndOffset() > 0) ? ((IndexedRegion) child).getStartOffset() : iNode.getEndOffset(); - } - - /** - * - */ - public int getChildInsertPos(ICSSNode node) { - int n = ((IndexedRegion) node).getEndOffset(); - if (n > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); - if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_DELIMITER) - return n - 1; - return n; - } - return -1; - } - - /** - * - */ - public synchronized static ImportRuleFormatter getInstance() { - if (instance == null) - instance = new ImportRuleFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/MediaListFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/MediaListFormatter.java deleted file mode 100644 index fa526f224c..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/MediaListFormatter.java +++ /dev/null @@ -1,211 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.w3c.dom.stylesheets.MediaList; - - -/** - * - */ -public class MediaListFormatter extends DefaultCSSSourceFormatter { - - private static MediaListFormatter instance; - - /** - * - */ - MediaListFormatter() { - super(); - } - - /** - * - */ - public StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext context) { - StringBuffer buf = new StringBuffer(); - if (node == null || attr == null) - return buf; - - boolean first = false, last = false; - // get region to replace - if (context != null && ((IndexedRegion) node).getEndOffset() > 0) { - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) attr).getStartOffset()); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) attr).getStartOffset()); - RegionIterator it = new RegionIterator(flatNode, region); - it.prev(); - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - while (it.hasPrev()) { - ITextRegion prev = it.prev(); - if (prev.getType() == CSSRegionContexts.CSS_S || prev.getType() == CSSRegionContexts.CSS_MEDIA_SEPARATOR || prev.getType() == CSSRegionContexts.CSS_COMMENT) - context.start = it.getStructuredDocumentRegion().getStartOffset(prev); - else - break; - } - if (context.start < ((IndexedRegion) node).getStartOffset()) { - context.start = ((IndexedRegion) node).getStartOffset(); - first = true; - - } - it.reset(flatNode, region); - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - while (it.hasNext()) { - ITextRegion next = it.next(); - if (next.getType() == CSSRegionContexts.CSS_S || next.getType() == CSSRegionContexts.CSS_MEDIA_SEPARATOR || next.getType() == CSSRegionContexts.CSS_COMMENT) - context.end = it.getStructuredDocumentRegion().getEndOffset(next); - else - break; - } - if (((IndexedRegion) node).getEndOffset() < context.end) { - context.end = ((IndexedRegion) node).getEndOffset(); - last = true; - } - } else { - last = true; - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) node).getEndOffset() - 1); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) node).getEndOffset() - 1); - RegionIterator it = new RegionIterator(flatNode, region); - context.start = it.getStructuredDocumentRegion().getEndOffset(region); - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - while (it.hasPrev()) { - ITextRegion prev = it.prev(); - if (prev.getType() == CSSRegionContexts.CSS_S || prev.getType() == CSSRegionContexts.CSS_MEDIA_SEPARATOR || prev.getType() == CSSRegionContexts.CSS_COMMENT) - context.start = it.getStructuredDocumentRegion().getStartOffset(prev); - else - break; - } - if (context.start < ((IndexedRegion) node).getStartOffset()) { - context.start = ((IndexedRegion) node).getStartOffset(); - first = true; - } - } - } - // generate text - if (insert && attr.getValue() != null && attr.getValue().length() > 0) { - if (!first) - buf.append(","); //$NON-NLS-1$ - appendSpaceBefore(node, attr.getValue(), buf); - buf.append(attr.getValue()); - if (!last) { - buf.append(","); //$NON-NLS-1$ - appendSpaceBefore(node, "", buf); //$NON-NLS-1$ - } - } else if (!first && !last) { - buf.append(","); //$NON-NLS-1$ - appendSpaceBefore(node, "", buf); //$NON-NLS-1$ - } - return buf; - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int start = ((IndexedRegion) node).getStartOffset(); - int end = ((IndexedRegion) node).getEndOffset(); - - if (end > 0) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - } else { // generate source - MediaList list = (MediaList) node; - int n = list.getLength(); - for (int i = 0; i < n; i++) { - String medium = list.item(i); - if (CSSCorePlugin.getDefault().getPluginPreferences().getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER) - medium = medium.toUpperCase(); - else - medium = medium.toLowerCase(); - - if (i != 0) { - source.append(","); //$NON-NLS-1$ - appendSpaceBefore(node, medium, source); - } - source.append(medium); - } - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - if (needS(outside[1]) && !isIncludesPreEnd(node, region)) - appendSpaceBefore(node, outside[1], source); - } - - /** - * - */ - public int getAttrInsertPos(ICSSNode node, String attrName) { - if (node == null || attrName == null || attrName.length() == 0) - return -1; - - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(attrName); - - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - IndexedRegion iNode = (IndexedRegion) node; - if (iNode.getEndOffset() <= 0) - return -1; - - /* - * ITextRegion regions[] = - * getRegionsWithoutWhiteSpaces(node.getOwnerDocument().getModel().getStructuredDocument(), - * new FormatRegion(iNode.getStartOffset(), iNode.getEndOffset() - - * iNode.getStartOffset() + 1)); for(int i=regions.length - 1; i >= 0; - * i--) { if (regions[i].getType() == CSSRegionContexts.IMPORTANT_SYM) - * return regions[i].getStartOffset(); } - */ - return iNode.getEndOffset(); - } - - /** - * - */ - public synchronized static MediaListFormatter getInstance() { - if (instance == null) - instance = new MediaListFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/MediaRuleFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/MediaRuleFormatter.java deleted file mode 100644 index b7525322bf..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/MediaRuleFormatter.java +++ /dev/null @@ -1,383 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class MediaRuleFormatter extends AbstractCSSSourceFormatter { - - public final static java.lang.String MEDIA = "@media";//$NON-NLS-1$ - private static MediaRuleFormatter instance; - - /** - * - */ - MediaRuleFormatter() { - super(); - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, String toAppend, StringBuffer source, IRegion exceptFor) { - ICSSNode prev = (child != null) ? child.getPreviousSibling() : node.getLastChild(); - int start = (prev != null) ? ((IndexedRegion) prev).getEndOffset() : 0; - int end = (child != null) ? ((IndexedRegion) child).getStartOffset() : 0; - if (start > 0 && start < end) { // source formatting - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - // get meaning regions - CompoundRegion[] regions = null; - if (exceptFor == null) - regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - else { - String pickupType = null; - if ((prev != null && prev.getNodeType() == ICSSNode.MEDIALIST_NODE) || (prev == null && (child == null || child.getNodeType() != ICSSNode.MEDIALIST_NODE))) { - pickupType = CSSRegionContexts.CSS_LBRACE; - } - regions = getRegions(structuredDocument, new FormatRegion(start, end - start), exceptFor, pickupType); - } - // extract source - if (child != null && child.getNodeType() == ICSSNode.MEDIALIST_NODE) { // between - // "@media" - // and - // mediatype - for (int i = 0; i < regions.length; i++) { - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - } - appendSpaceBefore(node, toAppend, source); - } else if (child != null && (child.getPreviousSibling() == null || child.getPreviousSibling().getNodeType() == ICSSNode.MEDIALIST_NODE)) { // between - // mediatype - // and - // the - // first - // style - // rule - for (int i = 0; i < regions.length; i++) { - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - } - appendDelimBefore(node, null, source); - } else { // between styles - for (int i = 0; i < regions.length; i++) { - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - } - appendDelimBefore(node, null, source); - } - } else { // source generation - if (child == null && prev != null && prev.getNodeType() != ICSSNode.MEDIALIST_NODE) { // after - // the - // last - // style - // rule - appendDelimBefore(node.getParentNode(), null, source); - } else if (child != null && child.getNodeType() == ICSSNode.MEDIALIST_NODE) { // between - // "@media" - // and - // mediatype - appendSpaceBefore(node, toAppend, source); - } else if (prev != null && prev.getNodeType() == ICSSNode.MEDIALIST_NODE) { // between - // mediatype - // and - // the - // first - // style - // rule - appendSpaceBefore(node, "{", source);//$NON-NLS-1$ - source.append("{");//$NON-NLS-1$ - if (child != null) - appendDelimBefore(node, null, source); - else - appendDelimBefore(node.getParentNode(), null, source); - } else { // normal case - appendDelimBefore(node, null, source); - } - } - - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, IRegion region, String toAppend, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - if (child != null && child.getNodeType() == ICSSNode.MEDIALIST_NODE) { // between - // "@media" - // and - // mediatype - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - } - if (needS(outside[1]) && ((IndexedRegion) child).getStartOffset() == region.getOffset() + region.getLength()) { - appendSpaceBefore(node, toAppend, source); - } - } else if (child != null && (child.getPreviousSibling() == null || child.getPreviousSibling().getNodeType() == ICSSNode.MEDIALIST_NODE)) { // between - // mediatype - // and - // the - // first - // style - // rule - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - } - if (needS(outside[1]) && ((IndexedRegion) child).getStartOffset() == region.getOffset() + region.getLength()) { - appendDelimBefore(node, null, source); - } - } else { // between styles - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - } - if (needS(outside[1]) && ((IndexedRegion) child).getStartOffset() == region.getOffset() + region.getLength()) { - appendDelimBefore(node, null, source); - } - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, StringBuffer source) { - int end = ((IndexedRegion) node).getEndOffset(); - int start = (node.getLastChild() != null && ((IndexedRegion) node.getLastChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getLastChild()).getEndOffset() : getChildInsertPos(node); - if (end > 0 && start < end) { // source formatting - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - if (node.getLastChild() == null || node.getLastChild().getNodeType() != ICSSNode.MEDIALIST_NODE) { - for (int i = 0; i < regions.length; i++) { - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - } else { - boolean bInCurlyBrace = false; - for (int i = 0; i < regions.length; i++) { - if (!bInCurlyBrace) - appendSpaceBefore(node, regions[i], source); - else - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - if (regions[i].getType() == CSSRegionContexts.CSS_LBRACE) - bInCurlyBrace = true; - } - } - } else { // source generation - String delim = getLineDelimiter(node); - if (node.getLastChild() != null && node.getLastChild().getNodeType() == ICSSNode.MEDIALIST_NODE) { - appendSpaceBefore(node, "{", source);//$NON-NLS-1$ - source.append("{");//$NON-NLS-1$ - } - - source.append(delim); - source.append(getIndent(node)); - source.append("}");//$NON-NLS-1$ - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - int start = ((IndexedRegion) node).getStartOffset(); - int end = (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getFirstChild()).getStartOffset() : getChildInsertPos(node); - - if (end > 0) { // source formatting - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - } else { // source generation - String str = MEDIA; - if (CSSCorePlugin.getDefault().getPluginPreferences().getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER) - str = MEDIA.toUpperCase(); - source.append(str); - } - ICSSNode child = node.getFirstChild(); - if (child != null && (child instanceof org.w3c.dom.stylesheets.MediaList) && ((org.w3c.dom.stylesheets.MediaList) child).getLength() > 0) { - appendSpaceBefore(node, "", source);//$NON-NLS-1$ - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - if (needS(outside[1]) && !isIncludesPreEnd(node, region)) - appendSpaceBefore(node, outside[1], source); - } - - /** - * - */ - public int getChildInsertPos(ICSSNode node) { - int n = ((IndexedRegion) node).getEndOffset(); - if (n > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); - if (flatNode.getRegionAtCharacterOffset(n - 1).getType() == CSSRegionContexts.CSS_LBRACE) - return n - 1; - return n; - } - return -1; - } - - /** - * - */ - public synchronized static MediaRuleFormatter getInstance() { - if (instance == null) - instance = new MediaRuleFormatter(); - return instance; - } - - /** - * - * @return int - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param insertPos - * int - */ - public int getLengthToReformatAfter(ICSSNode node, int insertPos) { - if (node == null) - return 0; - IndexedRegion nnode = (IndexedRegion) node; - if (insertPos <= 0 || !nnode.contains(insertPos - 1)) - return 0; - - if (node.getFirstChild().getNextSibling() == node.getLastChild()) { // inserted - // first - // style - // rule - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(insertPos); - if (flatNode == null) - return 0; - ITextRegion region = flatNode.getRegionAtCharacterOffset(insertPos); - if (region == null) - return 0; - RegionIterator it = new RegionIterator(flatNode, region); - while (it.hasNext()) { - region = it.next(); - if (region.getType() == CSSRegionContexts.CSS_LBRACE) - break; - if (nnode.getEndOffset() <= it.getStructuredDocumentRegion().getEndOffset(region)) - break; - } - int pos = it.getStructuredDocumentRegion().getStartOffset(region) - insertPos; - return (pos >= 0) ? pos : 0; - - } - return super.getLengthToReformatAfter(node, insertPos); - } - - /** - * - * @return int - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param insertPos - * int - */ - public int getLengthToReformatBefore(ICSSNode node, int insertPos) { - if (node == null) - return 0; - IndexedRegion nnode = (IndexedRegion) node; - if (insertPos <= 0 || !nnode.contains(insertPos - 1)) - return 0; - - if (node.getFirstChild().getNextSibling() == node.getLastChild()) { // inserted - // first - // style - // rule - int pos = ((IndexedRegion) node.getFirstChild()).getEndOffset(); - if (pos <= 0) - pos = ((IndexedRegion) node).getStartOffset() + 6 /* - * length - * of - * "@media" - */; - return insertPos - pos; - } - return super.getLengthToReformatBefore(node, insertPos); - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/PageRuleFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/PageRuleFormatter.java deleted file mode 100644 index 63de94e368..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/PageRuleFormatter.java +++ /dev/null @@ -1,194 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSPageRule; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class PageRuleFormatter extends DeclContainerFormatter { - - public final static java.lang.String PAGE = "@page";//$NON-NLS-1$ - private static PageRuleFormatter instance; - - /** - * - */ - PageRuleFormatter() { - super(); - } - - /** - * - */ - public StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext context) { - StringBuffer buf = new StringBuffer(); - if (node == null || attr == null) - return buf; - - if (!ICSSPageRule.SELECTOR.equalsIgnoreCase(attr.getName())) - return buf; - - // get region to replace - if (context != null && ((IndexedRegion) node).getEndOffset() > 0) { - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) attr).getEndOffset() - 1); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) attr).getEndOffset() - 1); - RegionIterator it = new RegionIterator(flatNode, region); - it.next(); - if (it.hasNext()) { - ITextRegion next = it.next(); - if (next.getType() == CSSRegionContexts.CSS_S) - context.end = it.getStructuredDocumentRegion().getEndOffset(next); - else - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - } - else - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - } - else { - int pos = getAttrInsertPos(node, attr.getName()); - context.start = pos; - context.end = pos; - /* - * IStructuredDocumentRegion flatNode = - * node.getOwnerDocument().getModel().getStructuredDocument().getNodeAtCharacterOffset(((IndexedRegion)node).getStartOffset()); - * ITextRegion region = - * flatNode.getRegionAtCharacterOffset(((IndexedRegion)node).getStartOffset()); - * if (region.getType() == CSSRegionContexts.S) { - * context.start = region.getStartOffset(); context.end = - * region.getEndOffset(); } else { context.start = - * flatNode.getEndOffset() + 1; context.end = - * flatNode.getEndOffset(); } - */} - } - // generate text - if (insert) { - String val = attr.getValue(); - if (val != null && val.length() > 0) { - buf.append(val); - appendSpaceBefore(node, "", buf);//$NON-NLS-1$ - } - } - return buf; - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int start = ((IndexedRegion) node).getStartOffset(); - int end = (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getFirstChild()).getStartOffset() : getChildInsertPos(node); - - if (end > 0) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBetween(node, regions[i - 1], regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - } - else { // generate source - String str = PAGE; - if (CSSCorePlugin.getDefault().getPluginPreferences().getInt(CSSCorePreferenceNames.CASE_IDENTIFIER) == CSSCorePreferenceNames.UPPER) - str = PAGE.toUpperCase(); - source.append(str); - str = ((ICSSPageRule) node).getSelectorText(); - if (str != null && str.length() > 0) { - appendSpaceBefore(node, str, source); - source.append(str); - } - appendSpaceBefore(node, "{", source);//$NON-NLS-1$ - source.append("{");//$NON-NLS-1$ - } - appendDelimBefore(node, null, source); - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBetween(node, (i == 0) ? outside[0] : regions[i - 1], regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - if (needS(outside[1])) { - if (isIncludesPreEnd(node, region)) - appendDelimBefore(node, null, source); - else - appendSpaceBetween(node, regions[regions.length - 1], outside[1], source); - } - } - - /** - * - */ - public int getAttrInsertPos(ICSSNode node, String attrName) { - if (node == null || attrName == null || attrName.length() == 0) - return -1; - - if (!ICSSPageRule.SELECTOR.equalsIgnoreCase(attrName)) - return -1; - - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICSSPageRule.SELECTOR); - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - else if (((IndexedRegion) node).getEndOffset() > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) node).getStartOffset()); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) node).getStartOffset()); - RegionIterator it = new RegionIterator(flatNode, region); - while (it.hasNext()) { - region = it.next(); - if (region.getType() == CSSRegionContexts.CSS_LBRACE) { - return it.getStructuredDocumentRegion().getStartOffset(region); - } - if (it.getStructuredDocumentRegion().getEndOffset(region) >= ((IndexedRegion) node).getEndOffset()) - break; - } - } - return ((IndexedRegion) node).getStartOffset(); - } - - /** - * - */ - public synchronized static PageRuleFormatter getInstance() { - if (instance == null) - instance = new PageRuleFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/PrimitiveValueFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/PrimitiveValueFormatter.java deleted file mode 100644 index 1855e9d0c4..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/PrimitiveValueFormatter.java +++ /dev/null @@ -1,273 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -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.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclItem; -import org.eclipse.wst.css.core.internal.util.CSSUtil; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.w3c.dom.css.CSSPrimitiveValue; - - -/** - * - */ -public class PrimitiveValueFormatter extends DefaultCSSSourceFormatter { - - private static PrimitiveValueFormatter instance; - - /** - * - */ - PrimitiveValueFormatter() { - super(); - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - int start = ((IndexedRegion) node).getStartOffset(); - int end = ((IndexedRegion) node).getEndOffset(); - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - if (end > 0) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - boolean appendQuote = regions.length > 1 && node.getParentNode() instanceof ICSSStyleDeclItem && isCleanup() && getCleanupStrategy(node).isQuoteValues() && (((ICSSStyleDeclItem) node.getParentNode()).getPropertyName().equals(PropCMProperty.P_FONT) || ((ICSSStyleDeclItem) node.getParentNode()).getPropertyName().equals(PropCMProperty.P_FONT_FAMILY) || ((ICSSStyleDeclItem) node.getParentNode()).getPropertyName().equals(PropCMProperty.P_VOICE_FAMILY)); - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - - StringBuffer strBuf = new StringBuffer(); - boolean skipSpace = false; - for (int i = 0; i < regions.length; i++) { - if (i != 0 && !skipSpace) - appendSpaceBefore(node, regions[i], strBuf); - skipSpace = false; - strBuf.append(decoratedPropValueRegion(regions[i], stgy)); - if (regions[i].getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_FUNCTION) - skipSpace = true; - } - - if (appendQuote) { - source.append(quote); - String str = strBuf.toString(); - str = str.replace('\'', ' '); - str = str.replace('\"', ' '); - str = str.trim(); - source.append(str); - source.append(quote); - } - else { - source.append(strBuf); - } - } - else { // generate source - ICSSPrimitiveValue value = (ICSSPrimitiveValue) node; - short type = value.getPrimitiveType(); - String quote = preferences.getString(CSSCorePreferenceNames.FORMAT_QUOTE); - - String str = null; - switch (type) { - case CSSPrimitiveValue.CSS_NUMBER : - case CSSPrimitiveValue.CSS_PERCENTAGE : - case CSSPrimitiveValue.CSS_EMS : - case CSSPrimitiveValue.CSS_EXS : - case CSSPrimitiveValue.CSS_PX : - case CSSPrimitiveValue.CSS_CM : - case CSSPrimitiveValue.CSS_MM : - case CSSPrimitiveValue.CSS_IN : - case CSSPrimitiveValue.CSS_PT : - case CSSPrimitiveValue.CSS_PC : - case CSSPrimitiveValue.CSS_DEG : - case CSSPrimitiveValue.CSS_RAD : - case CSSPrimitiveValue.CSS_GRAD : - case CSSPrimitiveValue.CSS_MS : - case CSSPrimitiveValue.CSS_S : - case CSSPrimitiveValue.CSS_HZ : - case CSSPrimitiveValue.CSS_KHZ : - case CSSPrimitiveValue.CSS_DIMENSION : - case ICSSPrimitiveValue.CSS_INTEGER : - if (value.getFloatValue(type) == ((int) value.getFloatValue(type))) { - str = Integer.toString((int) value.getFloatValue(type)); - } - else { - str = Float.toString(value.getFloatValue(type)); - } - break; - case CSSPrimitiveValue.CSS_IDENT : - case ICSSPrimitiveValue.CSS_HASH : - case ICSSPrimitiveValue.CSS_INHERIT_PRIMITIVE : - str = value.getStringValue(); - if (str != null) { - if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER) - str = str.toUpperCase(); - else - str.toLowerCase(); - } - break; - case CSSPrimitiveValue.CSS_STRING : - case CSSPrimitiveValue.CSS_URI : - case CSSPrimitiveValue.CSS_ATTR : - case ICSSPrimitiveValue.CSS_URANGE : - case ICSSPrimitiveValue.CSS_FORMAT : - case ICSSPrimitiveValue.CSS_LOCAL : - case ICSSPrimitiveValue.CSS_COMMA : - case ICSSPrimitiveValue.CSS_SLASH : - str = value.getStringValue(); - } - - String preStr = null, postStr = null; - switch (type) { - case CSSPrimitiveValue.CSS_ATTR : - preStr = "attr(";//$NON-NLS-1$ - postStr = ")";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_CM : - postStr = "cm";//$NON-NLS-1$ - break; - // case ICSSPrimitiveValue.CSS_COUNTER: - case CSSPrimitiveValue.CSS_DEG : - postStr = "deg";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_EMS : - postStr = "em";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_EXS : - postStr = "ex";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_GRAD : - postStr = "grad";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_HZ : - postStr = "Hz";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_IN : - postStr = "in";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_KHZ : - postStr = "kHz";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_MM : - postStr = "mm";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_MS : - postStr = "ms";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_PC : - postStr = "pc";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_PERCENTAGE : - postStr = "%";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_PT : - postStr = "pt";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_PX : - postStr = "px";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_RAD : - postStr = "rad";//$NON-NLS-1$ - break; - // case ICSSPrimitiveValue.CSS_RECT: - // case ICSSPrimitiveValue.CSS_RGBCOLOR: - case CSSPrimitiveValue.CSS_S : - postStr = "s";//$NON-NLS-1$ - break; - case CSSPrimitiveValue.CSS_STRING : - quote = CSSUtil.detectQuote(str, quote); - preStr = quote; - postStr = quote; - break; - case CSSPrimitiveValue.CSS_URI : - quote = CSSUtil.detectQuote(str, quote); - preStr = "url(" + quote;//$NON-NLS-1$ - postStr = quote + ")";//$NON-NLS-1$ - break; - // the followings are original primitive values - case CSSPrimitiveValue.CSS_IDENT : - case CSSPrimitiveValue.CSS_UNKNOWN : - // use str - case ICSSPrimitiveValue.CSS_INTEGER : - case ICSSPrimitiveValue.CSS_HASH : - case ICSSPrimitiveValue.CSS_SLASH : - case ICSSPrimitiveValue.CSS_COMMA : - case CSSPrimitiveValue.CSS_DIMENSION : - case CSSPrimitiveValue.CSS_NUMBER : - case ICSSPrimitiveValue.CSS_INHERIT_PRIMITIVE : - break; - case ICSSPrimitiveValue.CSS_URANGE : - preStr = "U+";//$NON-NLS-1$ - break; - case ICSSPrimitiveValue.CSS_FORMAT : - quote = CSSUtil.detectQuote(str, quote); - preStr = "format(" + quote;//$NON-NLS-1$ - postStr = quote + ")";//$NON-NLS-1$ - break; - case ICSSPrimitiveValue.CSS_LOCAL : - quote = CSSUtil.detectQuote(str, quote); - preStr = "local(" + quote;//$NON-NLS-1$ - postStr = quote + ")";//$NON-NLS-1$ - break; - } - if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_VALUE) == CSSCorePreferenceNames.UPPER) { - if (preStr != null) - preStr = preStr.toUpperCase(); - if (postStr != null) - postStr = postStr.toUpperCase(); - } - if (preStr != null) - source.append(preStr); - if (str != null) - source.append(str); - if (postStr != null) - source.append(postStr); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - if (needS(outside[1]) && !isIncludesPreEnd(node, region)) - appendSpaceBefore(node, outside[1], source); - } - - /** - * - */ - public synchronized static PrimitiveValueFormatter getInstance() { - if (instance == null) - instance = new PrimitiveValueFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/RGBFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/RGBFormatter.java deleted file mode 100644 index a6909db3fe..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/RGBFormatter.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -/** - * - */ -public class RGBFormatter extends FunctionFormatter { - - private static RGBFormatter instance; - - /** - * - */ - RGBFormatter() { - super(); - } - - /** - * - */ - protected String getFunc() { - return "rgb(";//$NON-NLS-1$ - } - - /** - * - */ - public synchronized static RGBFormatter getInstance() { - if (instance == null) - instance = new RGBFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/RectFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/RectFormatter.java deleted file mode 100644 index f3ec832dfc..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/RectFormatter.java +++ /dev/null @@ -1,44 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -/** - * - */ -public class RectFormatter extends FunctionFormatter { - - private static RectFormatter instance; - - /** - * - */ - RectFormatter() { - super(); - } - - /** - * - */ - protected String getFunc() { - return "rect(";//$NON-NLS-1$ - } - - /** - * - */ - public synchronized static RectFormatter getInstance() { - if (instance == null) - instance = new RectFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleDeclItemFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleDeclItemFormatter.java deleted file mode 100644 index 64f911e849..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleDeclItemFormatter.java +++ /dev/null @@ -1,399 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSPrimitiveValue; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleDeclItem; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class StyleDeclItemFormatter extends DefaultCSSSourceFormatter { - - private static StyleDeclItemFormatter instance; - - /** - * - */ - StyleDeclItemFormatter() { - super(); - } - - /** - * - */ - private void appendAfterColonSpace(ICSSNode node, StringBuffer source) { - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - int n = preferences.getInt(CSSCorePreferenceNames.FORMAT_PROP_POST_DELIM); - - if (preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH) > 0 && (!preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_PROHIBIT_WRAP_ON_ATTR) || node.getOwnerDocument().getNodeType() != ICSSNode.STYLEDECLARATION_NODE)) { - int length = getLastLineLength(node, source); - int append = getFirstChildRegionLength(node); - if (length + n + append > preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH)) { - source.append(getLineDelimiter(node)); - source.append(getIndent(node)); - source.append(getIndentString()); - n = 0; // no space is necessary - } - } - // no delimiter case - while (n-- > 0) - source.append(" ");//$NON-NLS-1$ - } - - /** - * - */ - private int getFirstChildRegionLength(ICSSNode node) { - ICSSNode firstChild = node.getFirstChild(); - if (firstChild == null) - return 1; - int start = ((IndexedRegion) firstChild).getStartOffset(); - RegionIterator itr = new RegionIterator(node.getOwnerDocument().getModel().getStructuredDocument(), start); - while (itr.hasNext()) { - ITextRegion reg = itr.next(); - if (reg != null && reg.getType() != CSSRegionContexts.CSS_S) - return reg.getTextLength(); - } - return 1; - } - - /** - * - */ - public StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext context) { - StringBuffer buf = new StringBuffer(); - if (node == null || attr == null) - return buf; - - if (!ICSSStyleDeclItem.IMPORTANT.equalsIgnoreCase(attr.getName())) - return buf; - - // get region to replace - if (context != null && ((IndexedRegion) node).getEndOffset() > 0) { - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) attr).getStartOffset()); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) attr).getStartOffset()); - RegionIterator it = new RegionIterator(flatNode, region); - it.prev(); - if (it.hasPrev()) { - ITextRegion prev = it.prev(); - if (prev.getType() == CSSRegionContexts.CSS_S) - context.start = it.getStructuredDocumentRegion().getStartOffset(prev); - else - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - } else - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - } else { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) node).getEndOffset() - 1); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) node).getEndOffset() - 1); - if (region.getType() == CSSRegionContexts.CSS_S) { - context.start = flatNode.getStartOffset(region); - context.end = flatNode.getEndOffset(region); - } else { - context.start = flatNode.getEndOffset(); - context.end = flatNode.getEndOffset(); - } - } - } - // generate text - if (insert && attr.getValue() != null && attr.getValue().length() > 0) { - appendSpaceBefore(node, attr.getValue(), buf); - buf.append(attr.getValue()); - } - return buf; - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, String toAppend, StringBuffer source, IRegion exceptFor) { - ICSSNode prev = (child != null) ? child.getPreviousSibling() : node.getLastChild(); - int start = (prev != null) ? ((IndexedRegion) prev).getEndOffset() : 0; - int end = (child != null) ? ((IndexedRegion) child).getStartOffset() : 0; - if (start > 0 && start < end) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - // get meaning regions - CompoundRegion[] regions = null; - if (exceptFor == null) - regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - else { - regions = getRegions(structuredDocument, new FormatRegion(start, end - start), exceptFor, null); - } - // generate source - for (int i = 0; i < regions.length; i++) { - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 2, stgy)); // must - // be - // comments - } - } - if (child != null && child instanceof ICSSPrimitiveValue) { - if (((ICSSPrimitiveValue) child).getPrimitiveType() == ICSSPrimitiveValue.CSS_COMMA) - toAppend = ",";//$NON-NLS-1$ - else if (((ICSSPrimitiveValue) child).getPrimitiveType() == ICSSPrimitiveValue.CSS_SLASH) - toAppend = "/";//$NON-NLS-1$ - } - if (child != null && toAppend != null && !toAppend.equals(",") && !toAppend.equals("/")) //$NON-NLS-1$ //$NON-NLS-2$ - appendSpaceBefore(node, toAppend, source); - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, IRegion region, String toAppend, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 2, stgy)); // must be - // comments - } - if (needS(outside[1])) { - if (((IndexedRegion) child).getStartOffset() == region.getOffset() + region.getLength()) { - if (toAppend != "," && toAppend != "/") //$NON-NLS-1$ //$NON-NLS-2$ - appendSpaceBefore(node, toAppend, source); - } - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int end = ((IndexedRegion) node).getEndOffset(); - int start = (node.getLastChild() != null && ((IndexedRegion) node.getLastChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getLastChild()).getEndOffset() : getChildInsertPos(node); - if (end > 0 && start < end) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - } else { // generate source - // append "!important" - String priority = ((ICSSStyleDeclItem) node).getPriority(); - if (priority != null && priority.length() > 0) { - appendSpaceBefore(node, priority, source); - source.append(priority); - } - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedIdentRegion(regions[i], stgy)); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - int start = ((IndexedRegion) node).getStartOffset(); - int end = (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getFirstChild()).getStartOffset() : getChildInsertPos(node); - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - if (end > 0) { // format source - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropNameRegion(regions[i], stgy)); - } - } else { // generatoe source - ICSSStyleDeclItem item = (ICSSStyleDeclItem) node; - if (preferences.getInt(CSSCorePreferenceNames.CASE_PROPERTY_NAME) == CSSCorePreferenceNames.UPPER) - source.append(item.getPropertyName().toUpperCase()); - else - source.append(item.getPropertyName()); - - int k = preferences.getInt(CSSCorePreferenceNames.FORMAT_PROP_PRE_DELIM); - if (preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH) > 0 && (!preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_PROHIBIT_WRAP_ON_ATTR) || node.getOwnerDocument().getNodeType() != ICSSNode.STYLEDECLARATION_NODE)) { - int length = getLastLineLength(node, source); - int append = 1; - if (length + k + append > preferences.getInt(CSSCorePreferenceNames.LINE_WIDTH)) { - source.append(getLineDelimiter(node)); - source.append(getIndent(node)); - source.append(getIndentString()); - k = 0; // no space is necessary - } - } - // no delimiter case - while (k-- > 0) - source.append(" ");//$NON-NLS-1$ - source.append(":");//$NON-NLS-1$ - } - if (!isCleanup() || getCleanupStrategy(node).isFormatSource()) { - appendAfterColonSpace(node, source); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropNameRegion(regions[i], stgy)); - } - if (needS(outside[1])) { - if (isIncludesPreEnd(node, region) && (!isCleanup() || getCleanupStrategy(node).isFormatSource())) { - appendAfterColonSpace(node, source); - } else - appendSpaceBefore(node, outside[1], source); - } - } - - /** - * - */ - public StringBuffer formatValue(ICSSNode node) { - StringBuffer source = new StringBuffer(); - formatChildren(node, source); - - return source; - } - - /** - * - */ - public int getAttrInsertPos(ICSSNode node, String attrName) { - if (node == null || attrName == null || attrName.length() == 0) - return -1; - - if (!ICSSStyleDeclItem.IMPORTANT.equalsIgnoreCase(attrName)) - return -1; - - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICSSStyleDeclItem.IMPORTANT); - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - IndexedRegion iNode = (IndexedRegion) node; - if (iNode.getEndOffset() <= 0) - return -1; - - CompoundRegion regions[] = getRegionsWithoutWhiteSpaces(node.getOwnerDocument().getModel().getStructuredDocument(), new FormatRegion(iNode.getStartOffset(), iNode.getEndOffset() - iNode.getStartOffset()), getCleanupStrategy(node)); - for (int i = regions.length - 1; i >= 0; i--) { - if (regions[i].getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_IMPORTANT) - return regions[i].getStartOffset(); - } - return iNode.getEndOffset(); - } - - /** - * - */ - public int getChildInsertPos(ICSSNode node) { - int n = ((IndexedRegion) node).getEndOffset(); - if (n < 0) { - return -1; - } - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); - if (flatNode != null && flatNode.getType() == CSSRegionContexts.CSS_DECLARATION_DELIMITER) { - n -= flatNode.getLength(); - } - if (n > 0) { - String important = ((ICSSStyleDeclItem) node).getPriority(); - if (important != null && important.length() > 0) { - // find before "!important" position - flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); - RegionIterator it = new RegionIterator(flatNode, flatNode.getRegionAtCharacterOffset(n - 1)); - while (it.hasPrev()) { - ITextRegion region = it.prev(); - if (it.getStructuredDocumentRegion() != flatNode) - break; - if (region.getType() == CSSRegionContexts.CSS_DECLARATION_VALUE_IMPORTANT) - return it.getStructuredDocumentRegion().getStartOffset(region); - } - } - // skip last space - flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(n - 1); - ITextRegion region = flatNode.getRegionAtCharacterOffset(n - 1); - if (region != null) { - n -= region.getLength() - region.getTextLength(); - } - - return n; - } - return -1; - } - - /** - * - */ - public synchronized static StyleDeclItemFormatter getInstance() { - if (instance == null) - instance = new StyleDeclItemFormatter(); - return instance; - } - - private String getIndentString() { - StringBuffer indent = new StringBuffer(); - - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - if (preferences != null) { - char indentChar = ' '; - String indentCharPref = preferences.getString(CSSCorePreferenceNames.INDENTATION_CHAR); - if (CSSCorePreferenceNames.TAB.equals(indentCharPref)) { - indentChar = '\t'; - } - int indentationWidth = preferences.getInt(CSSCorePreferenceNames.INDENTATION_SIZE); - - for (int i = 0; i < indentationWidth; i++) { - indent.append(indentChar); - } - } - return indent.toString(); - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleDeclarationFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleDeclarationFormatter.java deleted file mode 100644 index ad06635a9f..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleDeclarationFormatter.java +++ /dev/null @@ -1,249 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.CSSCorePlugin; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.preferences.CSSCorePreferenceNames; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class StyleDeclarationFormatter extends DefaultCSSSourceFormatter { - - private static StyleDeclarationFormatter instance; - - /** - * - */ - StyleDeclarationFormatter() { - super(); - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, String toAppend, StringBuffer source, IRegion exceptFor) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - ICSSNode prev = (child != null) ? child.getPreviousSibling() : node.getLastChild(); - int start = (prev != null) ? ((IndexedRegion) prev).getEndOffset() : 0; - int end = (child != null) ? ((IndexedRegion) child).getStartOffset() : 0; - - // check no child - if (child == null && prev == null) - return; - - if (start > 0 && start < end) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - // get meaning regions - CompoundRegion[] regions = null; - if (exceptFor == null) - regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - else { - String pickupType = CSSRegionContexts.CSS_DECLARATION_DELIMITER; - if (prev == null || child == null) - pickupType = null; - regions = getRegions(structuredDocument, new FormatRegion(start, end - start), exceptFor, pickupType); - } - // extract source - for (int i = 0; i < regions.length; i++) { - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - } - } else if (prev != null && child != null) { // generate source : - // between two - // declarations - source.append(";");//$NON-NLS-1$ - } else if (prev == null) { // generate source : before the first - // declaration - org.eclipse.wst.css.core.internal.util.RegionIterator it = null; - if (end > 0) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - it = new org.eclipse.wst.css.core.internal.util.RegionIterator(structuredDocument, end - 1); - } else { - int pos = getChildInsertPos(node); - if (pos >= 0) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - it = new org.eclipse.wst.css.core.internal.util.RegionIterator(structuredDocument, pos - 1); - } - } - if (it != null) { - int limit = ((IndexedRegion) ((node.getParentNode() != null) ? node.getParentNode() : node)).getStartOffset(); - while (it.hasPrev()) { - ITextRegion curReg = it.prev(); - if (curReg.getType() == CSSRegionContexts.CSS_LBRACE || curReg.getType() == CSSRegionContexts.CSS_DECLARATION_DELIMITER) - break; - if (curReg.getType() != CSSRegionContexts.CSS_S && curReg.getType() != CSSRegionContexts.CSS_COMMENT) { - source.append(";");//$NON-NLS-1$ - break; - } - if (it.getStructuredDocumentRegion().getStartOffset(curReg) <= limit) - break; - } - } - } else if (child == null) { // generate source : after the last - // declaration - org.eclipse.wst.css.core.internal.util.RegionIterator it = null; - if (start > 0) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - it = new org.eclipse.wst.css.core.internal.util.RegionIterator(structuredDocument, start); - } else { - int pos = getChildInsertPos(node); - if (pos >= 0) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - it = new org.eclipse.wst.css.core.internal.util.RegionIterator(structuredDocument, pos); - } - } - if (it != null) { - int limit = ((IndexedRegion) ((node.getParentNode() != null) ? node.getParentNode() : node)).getEndOffset(); - while (it.hasNext()) { - ITextRegion curReg = it.next(); - if (curReg.getType() == CSSRegionContexts.CSS_RBRACE || curReg.getType() == CSSRegionContexts.CSS_DECLARATION_DELIMITER) - break; - if (curReg.getType() != CSSRegionContexts.CSS_S && curReg.getType() != CSSRegionContexts.CSS_COMMENT) { - source.append(";");//$NON-NLS-1$ - break; - } - if (limit <= it.getStructuredDocumentRegion().getEndOffset(curReg)) - break; - } - } - } - if (child == null) { - if (((IndexedRegion) node).getEndOffset() <= 0) { - // get next region - int pos = getChildInsertPos(node); - CompoundRegion toAppendRegion = null; - if (pos >= 0) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - IStructuredDocumentRegion flatNode = structuredDocument.getRegionAtCharacterOffset(pos); - toAppendRegion = new CompoundRegion(flatNode, flatNode.getRegionAtCharacterOffset(pos)); - } - appendDelimBefore(node.getParentNode(), toAppendRegion, source); - } - } else if ((prev != null || ((IndexedRegion) node).getEndOffset() <= 0)) { - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - - if (preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_ONE_PER_LINE) && (node.getOwnerDocument() != node || !preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_PROHIBIT_WRAP_ON_ATTR))) - appendDelimBefore(node, null, source); - else if (prev != null || node.getOwnerDocument() != node) - appendSpaceBefore(node, toAppend, source); - } - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, IRegion region, String toAppend, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must be - // comments - } - Preferences preferences = CSSCorePlugin.getDefault().getPluginPreferences(); - if (needS(outside[1])) { - if (((IndexedRegion) child).getStartOffset() == region.getOffset() + region.getLength() && preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_ONE_PER_LINE) && (node.getOwnerDocument() != node || !preferences.getBoolean(CSSCorePreferenceNames.WRAPPING_PROHIBIT_WRAP_ON_ATTR))) { - appendDelimBefore(node, null, source); - } else - appendSpaceBefore(node, toAppend, source); - } - } - - /** - * Insert the method's description here. - */ - public int getChildInsertPos(ICSSNode node) { - if (node == null) - return -1; - int pos = super.getChildInsertPos(node); - if (pos < 0) { - CSSSourceGenerator formatter = getParentFormatter(node); - return (formatter != null) ? formatter.getChildInsertPos(node.getParentNode()) : -1; - } - return pos; - } - - /** - * - */ - public synchronized static StyleDeclarationFormatter getInstance() { - if (instance == null) - instance = new StyleDeclarationFormatter(); - return instance; - } - - /** - * - * @return int - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param insertPos - * int - */ - public int getLengthToReformatAfter(ICSSNode node, int insertPos) { - if (node == null) - return 0; - IndexedRegion nnode = (IndexedRegion) node; - if (insertPos < 0 || !nnode.contains(insertPos)) { - if (node.getParentNode() != null && nnode.getEndOffset() <= 0) { - CSSSourceGenerator pntFormatter = getParentFormatter(node); - if (pntFormatter != null) - return pntFormatter.getLengthToReformatAfter(node.getParentNode(), insertPos); - } - return 0; - } - return super.getLengthToReformatAfter(node, insertPos); - } - - /** - * - * @return int - * @param node - * org.eclipse.wst.css.core.model.interfaces.ICSSNode - * @param insertPos - * int - */ - public int getLengthToReformatBefore(ICSSNode node, int insertPos) { - if (node == null) - return 0; - IndexedRegion nnode = (IndexedRegion) node; - if (insertPos <= 0 || !nnode.contains(insertPos - 1)) { - if (node.getParentNode() != null && nnode.getEndOffset() <= 0) { - CSSSourceGenerator pntFormatter = getParentFormatter(node); - if (pntFormatter != null) - return pntFormatter.getLengthToReformatBefore(node.getParentNode(), insertPos); - } - return 0; - } - return super.getLengthToReformatBefore(node, insertPos); - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleRuleFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleRuleFormatter.java deleted file mode 100644 index ce9356d72c..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleRuleFormatter.java +++ /dev/null @@ -1,166 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSAttr; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSStyleRule; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class StyleRuleFormatter extends DeclContainerFormatter { - - private static StyleRuleFormatter instance; - - /** - * - */ - StyleRuleFormatter() { - super(); - } - - /** - * - */ - public StringBuffer formatAttrChanged(ICSSNode node, ICSSAttr attr, boolean insert, AttrChangeContext context) { - StringBuffer buf = new StringBuffer(); - if (node == null || attr == null) - return buf; - - if (!ICSSStyleRule.SELECTOR.equalsIgnoreCase(attr.getName())) - return buf; - - // get region to replace - if (context != null && ((IndexedRegion) node).getEndOffset() > 0) { - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) attr).getEndOffset() - 1); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) attr).getEndOffset() - 1); - RegionIterator it = new RegionIterator(flatNode, region); - it.next(); - if (it.hasNext()) { - ITextRegion next = it.next(); - if (next.getType() == CSSRegionContexts.CSS_S) - context.end = it.getStructuredDocumentRegion().getEndOffset(next); - else - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - } - else - context.end = it.getStructuredDocumentRegion().getEndOffset(region); - context.start = it.getStructuredDocumentRegion().getStartOffset(region); - } - else { - IStructuredDocumentRegion flatNode = node.getOwnerDocument().getModel().getStructuredDocument().getRegionAtCharacterOffset(((IndexedRegion) node).getStartOffset()); - ITextRegion region = flatNode.getRegionAtCharacterOffset(((IndexedRegion) node).getStartOffset()); - if (region.getType() == CSSRegionContexts.CSS_S) { - context.start = flatNode.getStartOffset(region); - context.end = flatNode.getEndOffset(region); - } - else { - context.start = flatNode.getEndOffset(); - context.end = flatNode.getEndOffset(); - } - } - } - // generate text - if (insert) { - buf.append(attr.getValue()); - appendSpaceBefore(node, "", buf);//$NON-NLS-1$ - } - return buf; - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int start = ((IndexedRegion) node).getStartOffset(); - int end = (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getFirstChild()).getStartOffset() : getChildInsertPos(node); - if (end > 0) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBetween(node, regions[i - 1], regions[i], source); - source.append(decoratedSelectorRegion(regions[i], (i != 0) ? regions[i - 1] : null, stgy)); - } - } - else { // generate source - String str = ((ICSSStyleRule) node).getSelectorText(); - // appendSpaceBefore(node,str,source); - source.append(str); - appendSpaceBefore(node, "{", source);//$NON-NLS-1$ - source.append("{");//$NON-NLS-1$ - } - appendDelimBefore(node, null, source); - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBetween(node, (i == 0) ? outside[0] : regions[i - 1], regions[i], source); - source.append(decoratedSelectorRegion(regions[i], (i != 0) ? regions[i - 1] : null, stgy)); - } - if (needS(outside[1])) { - if (isIncludesPreEnd(node, region)) - appendDelimBefore(node, null, source); - else - appendSpaceBetween(node, regions[regions.length - 1], outside[1], source); - } - } - - /** - * - */ - public int getAttrInsertPos(ICSSNode node, String attrName) { - if (node == null || attrName == null || attrName.length() == 0) - return -1; - - if (!ICSSStyleRule.SELECTOR.equalsIgnoreCase(attrName)) - return -1; - - ICSSAttr attr = (ICSSAttr) node.getAttributes().getNamedItem(ICSSStyleRule.SELECTOR); - if (attr != null && ((IndexedRegion) attr).getEndOffset() > 0) - return ((IndexedRegion) attr).getStartOffset(); - else - return ((IndexedRegion) node).getStartOffset(); - } - - /** - * - */ - public synchronized static StyleRuleFormatter getInstance() { - if (instance == null) - instance = new StyleRuleFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleSheetFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleSheetFormatter.java deleted file mode 100644 index 5bc1984233..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/StyleSheetFormatter.java +++ /dev/null @@ -1,260 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.parserz.CSSRegionContexts; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSModel; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.core.internal.util.RegionIterator; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; - - -/** - * - */ -public class StyleSheetFormatter extends AbstractCSSSourceFormatter { - - private static StyleSheetFormatter instance; - - /** - * - */ - StyleSheetFormatter() { - super(); - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, String toAppend, StringBuffer source, IRegion exceptFor) { - String delim = getLineDelimiter(node); - ICSSNode prev = (child != null) ? child.getPreviousSibling() : node.getLastChild(); - if (prev == null && child == null) - return; - int start = (prev != null) ? ((IndexedRegion) prev).getEndOffset() : 0; - int end = (child != null) ? ((IndexedRegion) child).getStartOffset() : 0; - if (start > 0 && start < end) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - // get meaning regions - CompoundRegion[] regions = null; - if (exceptFor == null) - regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - else { - String pickupType = CSSRegionContexts.CSS_DELIMITER; - if (prev == null) - pickupType = null; - regions = getRegions(structuredDocument, new FormatRegion(start, end - start), exceptFor, pickupType); - } - // generate source - if (prev != null) { - appendDelimBefore(node, (regions.length > 0) ? regions[0] : null, source); - } - for (int i = 0; i < regions.length; i++) { - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must - // be - // comments - // or - // semi_colon - if (regions[i].getType() == CSSRegionContexts.CSS_DELIMITER) { - // append delim after - appendDelimBefore(node, null, source); - } - } - if (prev != null) - appendDelimBefore(node, null, source); - } - else if (prev != null && child != null) { // source generation : - // between two rules - source.append(delim); - source.append(delim); - } - else if (((IndexedRegion) node).getEndOffset() > 0) { - if (prev == null) { // source formatting : before the first rule - ICSSNode next = child.getNextSibling(); - int pos = getChildInsertPos(node); - if (next != null && ((IndexedRegion) next).getEndOffset() > 0) - pos = ((IndexedRegion) next).getStartOffset(); - if (pos != 0) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] prevRegions = getRegions(structuredDocument, new FormatRegion(0, pos), null, null); - if (prevRegions != null && prevRegions.length > 0) - appendDelimBefore(node, null, source); - } - } - else if (child == null) { // source formatting : after the last - // rule - if (start > 0 && start <= ((IndexedRegion) node).getEndOffset()) { - appendDelimBefore(node, null, source); - } - else if (start <= 0) { - int pos = getChildInsertPos(node); - if (pos < ((IndexedRegion) node).getEndOffset()) { - appendDelimBefore(node, null, source); - } - } - } - } - } - - /** - * - */ - protected void formatBefore(ICSSNode node, ICSSNode child, IRegion region, String toAppend, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); // must be - // comments - } - if (needS(outside[1])) { - if (((IndexedRegion) child).getStartOffset() == region.getOffset() + region.getLength()) - appendDelimBefore(node, null, source); - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, StringBuffer source) { - int end = ((IndexedRegion) node).getEndOffset(); - int start = (node.getLastChild() != null && ((IndexedRegion) node.getLastChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getLastChild()).getEndOffset() : getChildInsertPos(node); - if (end > 0 && start < end) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - if ((regions != null && regions.length > 0 && regions[regions.length - 1].getType() == CSSRegionContexts.CSS_CDC) || node.getOwnerDocument().getModel().getStyleSheetType() == ICSSModel.EMBEDDED) - appendDelimBefore(node, null, source); - } - else { // source generation - if (node.getOwnerDocument().getModel() != null && node.getOwnerDocument().getModel().getStyleSheetType() == ICSSModel.EMBEDDED) - appendDelimBefore(node, null, source); - return; // nothing - } - } - - /** - * - */ - protected void formatPost(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - } - - /** - * - */ - protected void formatPre(org.eclipse.wst.css.core.internal.provisional.document.ICSSNode node, java.lang.StringBuffer source) { - int start = ((IndexedRegion) node).getStartOffset(); - int end = (node.getFirstChild() != null && ((IndexedRegion) node.getFirstChild()).getEndOffset() > 0) ? ((IndexedRegion) node.getFirstChild()).getStartOffset() : getChildInsertPos(node); - if (end > 0) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || regions[i].getType() == CSSRegionContexts.CSS_CDO || node.getOwnerDocument().getModel().getStyleSheetType() == ICSSModel.EMBEDDED) - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - if (node.getLastChild() != null && (source.length() > 0 || node.getOwnerDocument().getModel().getStyleSheetType() == ICSSModel.EMBEDDED)) { - appendDelimBefore(node, null, source); - } - } - else if (node.getOwnerDocument().getModel() != null && node.getOwnerDocument().getModel().getStyleSheetType() == ICSSModel.EMBEDDED) { - appendDelimBefore(node, null, source); - // source.append("<!--"); - // appendDelimBefore(node,null, source); - } - else - return; // nothing - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, java.lang.StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0]) || regions[i].getType() == CSSRegionContexts.CSS_CDO || node.getOwnerDocument().getModel().getStyleSheetType() == ICSSModel.EMBEDDED) - appendDelimBefore(node, regions[i], source); - source.append(decoratedRegion(regions[i], 0, stgy)); - } - if (needS(outside[1])) { - if (isIncludesPreEnd(node, region)) { - if (source.length() > 0 || node.getOwnerDocument().getModel().getStyleSheetType() == ICSSModel.EMBEDDED) { - String delim = getLineDelimiter(node); - source.append(delim); - } - } - } - } - - /** - * - */ - public int getChildInsertPos(ICSSNode node) { - int n = ((IndexedRegion) node).getEndOffset(); - if (n > 0) { - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - IStructuredDocumentRegion flatNode = structuredDocument.getRegionAtCharacterOffset(n - 1); - ITextRegion region = flatNode.getRegionAtCharacterOffset(n - 1); - RegionIterator it = new RegionIterator(flatNode, region); - while (it.hasPrev()) { - ITextRegion reg = it.prev(); - if (reg.getType() == CSSRegionContexts.CSS_CDC) - return it.getStructuredDocumentRegion().getStartOffset(reg); - } - return n; - } - return -1; - } - - /** - * - */ - public synchronized static StyleSheetFormatter getInstance() { - if (instance == null) - instance = new StyleSheetFormatter(); - return instance; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/UnknownRuleFormatter.java b/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/UnknownRuleFormatter.java deleted file mode 100644 index 406a408660..0000000000 --- a/bundles/org.eclipse.wst.css.core/src/org/eclipse/wst/css/core/internal/formatter/UnknownRuleFormatter.java +++ /dev/null @@ -1,86 +0,0 @@ -/******************************************************************************* - * 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.formatter; - - - -import org.eclipse.jface.text.IRegion; -import org.eclipse.wst.css.core.internal.cleanup.CSSCleanupStrategy; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.w3c.dom.css.CSSUnknownRule; - - -/** - * - */ -public class UnknownRuleFormatter extends DefaultCSSSourceFormatter { - - private static UnknownRuleFormatter instance; - - /** - * - */ - UnknownRuleFormatter() { - super(); - } - - /** - * - */ - protected void formatPre(ICSSNode node, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - int start = ((IndexedRegion) node).getStartOffset(); - int end = ((IndexedRegion) node).getEndOffset(); - if (end > 0) { // format source - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, new FormatRegion(start, end - start), stgy); - for (int i = 0; i < regions.length; i++) { - if (i != 0) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - } - else { // generate source - CSSUnknownRule rule = (CSSUnknownRule) node; - source.append(rule.getCssText()); - } - } - - /** - * - */ - protected void formatPre(ICSSNode node, IRegion region, StringBuffer source) { - CSSCleanupStrategy stgy = getCleanupStrategy(node); - - IStructuredDocument structuredDocument = node.getOwnerDocument().getModel().getStructuredDocument(); - CompoundRegion[] regions = getRegionsWithoutWhiteSpaces(structuredDocument, region, stgy); - CompoundRegion[] outside = getOutsideRegions(structuredDocument, region); - for (int i = 0; i < regions.length; i++) { - if (i != 0 || needS(outside[0])) - appendSpaceBefore(node, regions[i], source); - source.append(decoratedPropValueRegion(regions[i], stgy)); - } - if (needS(outside[1]) && !isIncludesPreEnd(node, region)) - appendSpaceBefore(node, outside[1], source); - } - - /** - * - */ - public synchronized static UnknownRuleFormatter getInstance() { - if (instance == null) - instance = new UnknownRuleFormatter(); - return instance; - } -}
\ No newline at end of file |