/*
 * Copyright 2011 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.css.ast;

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

/**
 * Represents an {@code @font-face} declaration. This is almost like a
 * {@link CssRule} except that it cannot be merged.
 */
public class CssFontFace extends CssNode implements HasProperties {
  private final List<CssProperty> properties = new ArrayList<CssProperty>();

  public List<CssProperty> getProperties() {
    return properties;
  }

  @Override
    public boolean isStatic() {
    return true;
  }

  public void traverse(CssVisitor visitor, Context context) {
    if (visitor.visit(this, context)) {
      visitor.acceptWithInsertRemove(properties);
    }
    visitor.endVisit(this, context);
  }
}
