Package org.eclipse.wst.html.core.internal.format

Source Code of org.eclipse.wst.html.core.internal.format.EmbeddedCSSFormatter

/*******************************************************************************
* Copyright (c) 2004, 2007 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.html.core.internal.format;



import org.eclipse.wst.css.core.internal.formatter.CSSSourceFormatter;
import org.eclipse.wst.css.core.internal.formatter.CSSSourceFormatterFactory;
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.html.core.internal.provisional.HTMLFormatContraints;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMText;

// nakamori_TODO: check and remove

public class EmbeddedCSSFormatter extends HTMLFormatter {

  // private IAdapterFactory factory = new
  // CSSSourceFormatterFactory(CSSSourceFormatter.class, true);
  /**
   */
  protected EmbeddedCSSFormatter() {
    super();
  }

  /**
   */
  protected void formatNode(IDOMNode node, HTMLFormatContraints contraints) {
    if (node == null)
      return;
    IDOMText text = (IDOMText) node;

    String source = getCSSContent(node);
    if (source == null) { // fallback
      source = text.getSource();
    }

    int offset = text.getStartOffset();
    int length = text.getEndOffset() - offset;
    replaceSource(text.getModel(), offset, length, source);
    setWidth(contraints, source);
  }

  /**
   */
  private String getCSSContent(IDOMNode text) {
    ICSSModel model = getCSSModel(text);
    if (model == null)
      return null;
    ICSSNode document = model.getDocument();
    if (document == null)
      return null;
    INodeNotifier notifier = (INodeNotifier) document;
    CSSSourceFormatter formatter = (CSSSourceFormatter) notifier.getAdapterFor(CSSSourceFormatter.class);
    // try another way to get formatter
    if (formatter == null)
      formatter = CSSSourceFormatterFactory.getInstance().getSourceFormatter(notifier);
    if (formatter == null)
      return null;
    StringBuffer buffer = formatter.format(document);
    if (buffer == null)
      return null;
    return buffer.toString();
  }

  /**
   */
  private ICSSModel getCSSModel(IDOMNode text) {
    if (text == null)
      return null;
    INodeNotifier notifier = (INodeNotifier) text.getParentNode();
    if (notifier == null)
      return null;
    INodeAdapter adapter = notifier.getAdapterFor(IStyleSheetAdapter.class);
    if (adapter == null)
      return null;
    if (!(adapter instanceof IStyleSheetAdapter))
      return null;
    IStyleSheetAdapter styleAdapter = (IStyleSheetAdapter) adapter;
    return styleAdapter.getModel();
  }
}
TOP

Related Classes of org.eclipse.wst.html.core.internal.format.EmbeddedCSSFormatter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.