blob: 47ea5e1d14aadc936e271c47bc80f1e09a9678b0 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.flex.compiler.ant.types;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DynamicConfigurator;
import org.apache.tools.ant.types.Commandline;
import org.apache.flex.compiler.ant.FlexTask;
import org.apache.flex.compiler.ant.config.ConfigBoolean;
import org.apache.flex.compiler.ant.config.ConfigString;
import org.apache.flex.compiler.ant.config.ConfigVariable;
import org.apache.flex.compiler.ant.config.NestedAttributeElement;
import org.apache.flex.compiler.ant.config.IOptionSource;
import org.apache.flex.compiler.ant.config.OptionSpec;
/**
* Supports the nested <fonts> tag.
*/
public final class Fonts implements IOptionSource, DynamicConfigurator
{
/*
* Use this defintion of LANGUAGE_RANGE if you want to allow users to set the
* compiler.fonts.languages.language-range by using a nested element named
* languages.language-range:
*
* private static OptionSpec LANGUAGE_RANGE = new OptionSpec("compiler.fonts.languages.language-range", "languages.language-range");
*
* Note that using this will no longer allow users to set the option by
* using a language-range nested element.
*/
private static final OptionSpec LANGUAGE_RANGE =
new OptionSpec("compiler.fonts.languages.language-range");
private static final OptionSpec MANAGERS =
new OptionSpec("compiler.fonts.managers");
public Fonts()
{
this(null);
}
public Fonts(FlexTask task)
{
attribs = new ConfigVariable[]
{
new ConfigBoolean(new OptionSpec("compiler.fonts.flash-type")),
new ConfigBoolean(new OptionSpec("compiler.fonts.advanced-anti-aliasing")),
new ConfigString(new OptionSpec("compiler.fonts.local-fonts-snapshot")),
new ConfigString(new OptionSpec("compiler.fonts.max-cached-fonts")),
new ConfigString(new OptionSpec("compiler.fonts.max-glyphs-per-face"))
};
nestedAttribs = new ArrayList<NestedAttributeElement>();
this.task = task;
}
private final ConfigVariable[] attribs;
private final ArrayList<NestedAttributeElement> nestedAttribs;
private final FlexTask task;
/*=======================================================================*
* Attributes *
*=======================================================================*/
public void setDynamicAttribute(String name, String value)
{
ConfigVariable var = null;
for (int i = 0; i < attribs.length && var == null; i++)
{
if (attribs[i].matches(name))
var = attribs[i];
}
if (var != null)
{
var.set(value);
}
else
{
throw new BuildException("The <font> type doesn't support the \""
+ name + "\" attribute.");
}
}
/*=======================================================================*
* Nested Elements *
*=======================================================================*/
public Object createDynamicElement(String name)
{
if (LANGUAGE_RANGE.matches(name))
{
NestedAttributeElement e = new NestedAttributeElement(new String[] { "lang", "range" }, LANGUAGE_RANGE, task);
nestedAttribs.add(e);
return e;
}
else
{
throw new BuildException("Invalid element: " + name);
}
}
public NestedAttributeElement createManager()
{
NestedAttributeElement e = new NestedAttributeElement("class", MANAGERS, task);
nestedAttribs.add(e);
return e;
}
/*=======================================================================*
* IOptionSource interface *
*=======================================================================*/
public void addToCommandline(Commandline cmdline)
{
for (int i = 0; i < attribs.length; i++)
{
attribs[i].addToCommandline(cmdline);
}
Iterator<NestedAttributeElement> it = nestedAttribs.iterator();
while (it.hasNext())
{
((IOptionSource)it.next()).addToCommandline(cmdline);
}
}
}