Package com.google.gwt.resources.converter

Source Code of com.google.gwt.resources.converter.ElseNodeCreator

/*
* Copyright 2014 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.resources.converter;

import com.google.gwt.resources.css.ast.Context;
import com.google.gwt.resources.css.ast.CssIf;
import com.google.gwt.resources.css.ast.CssNode;

import java.util.ArrayList;
import java.util.List;

/**
* The original Css parser doesn't create specific nodes for {@code @elif} and {@code @else}
* at-rules. That makes their conversion more difficult, especially for the {@code @else}
* at-rule.
* <p/>
* The main goal of this visitor is to create specific nodes for these two at-rules in
* order to ease their conversion.
*/
public class ElseNodeCreator extends ExtendedCssVisitor {

  @Override
  public boolean visit(CssIf cssIf, Context ctx) {
    List<CssNode> newNodes = new ArrayList<CssNode>();

    visitElseNodes(cssIf, newNodes);

    cssIf.getElseNodes().clear();
    cssIf.getElseNodes().addAll(newNodes);

    return true;
  }

  private void visitElseNodes(CssIf cssIf, List<CssNode> newNodes) {
    List<CssNode> elseNodes = cssIf.getElseNodes();
    CssElse cssElse = null;
    for (CssNode child : elseNodes) {
      if (elseNodes.size() == 1 && child instanceof CssIf) {
        // @elsif at-rule case
        CssIf cssIfChild = (CssIf) child;
        CssElIf cssElIF = new CssElIf(cssIfChild);
        newNodes.add(cssElIF);
        visitElseNodes(cssIfChild, newNodes);
      } else {
        // @else at-rule case
        if (cssElse == null) {
          cssElse = new CssElse();
        }

        cssElse.getNodes().add(child);
      }
    }

    if (cssElse != null) {
      newNodes.add(cssElse);
    }
  }
}
TOP

Related Classes of com.google.gwt.resources.converter.ElseNodeCreator

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.