/*
* Copyright (c) 2006 Henri Sivonen
* Copyright (c) 2007-2013 Mozilla Foundation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package org.whattf.datatype;
import org.relaxng.datatype.Datatype;
import org.relaxng.datatype.DatatypeBuilder;
import org.relaxng.datatype.DatatypeException;
import org.relaxng.datatype.DatatypeLibrary;
import org.relaxng.datatype.helpers.ParameterlessDatatypeBuilder;
/**
* Factory for HTML5 datatypes.
* @version $Id$
* @author hsivonen
*/
public class Html5DatatypeLibrary implements DatatypeLibrary {
public Html5DatatypeLibrary() {
super();
}
/**
* Returns a <code>DatatypeBuilder</code> for a named datatype. This method is
* unnecessary for direct access. Just use <code>createDatatype</code>.
* @param baseTypeLocalName the local name
* @return a <code>ParameterlessDatatypeBuilder</code> for the local name
* @see org.relaxng.datatype.DatatypeLibrary#createDatatypeBuilder(java.lang.String)
*/
public DatatypeBuilder createDatatypeBuilder(String baseTypeLocalName)
throws DatatypeException {
return new ParameterlessDatatypeBuilder(createDatatype(baseTypeLocalName));
}
/**
* The factory method for the datatypes of this library.
* @param typeLocalName the local name
* @return a <code>Datatype</code> instance for the local name
* @see org.relaxng.datatype.DatatypeLibrary#createDatatype(java.lang.String)
*/
public Datatype createDatatype(String typeLocalName)
throws DatatypeException {
if ("ID".equals(typeLocalName)) {
return new Id();
} else if ("IDREF".equals(typeLocalName)) {
return Idref.THE_INSTANCE;
} else if ("IDREFS".equals(typeLocalName)) {
return Idrefs.THE_INSTANCE;
} else if ("pattern".equals(typeLocalName)) {
return Pattern.THE_INSTANCE;
} else if ("datetime".equals(typeLocalName)) {
return Datetime.THE_INSTANCE;
} else if ("datetime-local".equals(typeLocalName)) {
return DatetimeLocal.THE_INSTANCE;
} else if ("datetime-tz".equals(typeLocalName)) {
return DatetimeTz.THE_INSTANCE;
} else if ("date-or-time".equals(typeLocalName)) {
return DateOrTime.THE_INSTANCE;
} else if ("date".equals(typeLocalName)) {
return Date.THE_INSTANCE;
} else if ("month".equals(typeLocalName)) {
return Month.THE_INSTANCE;
} else if ("week".equals(typeLocalName)) {
return Week.THE_INSTANCE;
} else if ("time".equals(typeLocalName)) {
return Time.THE_INSTANCE;
} else if ("iri".equals(typeLocalName)) {
return Iri.THE_INSTANCE;
} else if ("iri-ref".equals(typeLocalName)) {
return IriRef.THE_INSTANCE;
} else if ("string".equals(typeLocalName)) {
return AsciiCaseInsensitiveString.THE_INSTANCE;
} else if ("language".equals(typeLocalName)) {
return Language.THE_INSTANCE;
} else if ("media-query".equals(typeLocalName)) {
return MediaQuery.THE_INSTANCE;
} else if ("mime-type".equals(typeLocalName)) {
return MimeType.THE_INSTANCE;
} else if ("browsing-context".equals(typeLocalName)) {
return BrowsingContext.THE_INSTANCE;
} else if ("browsing-context-or-keyword".equals(typeLocalName)) {
return BrowsingContextOrKeyword.THE_INSTANCE;
} else if ("hash-name".equals(typeLocalName)) {
return HashName.THE_INSTANCE;
} else if ("integer".equals(typeLocalName)) {
return Int.THE_INSTANCE;
} else if ("integer-non-negative".equals(typeLocalName)) {
return IntNonNegative.THE_INSTANCE;
} else if ("integer-positive".equals(typeLocalName)) {
return IntPositive.THE_INSTANCE;
} else if ("float".equals(typeLocalName)) {
return FloatingPointExponent.THE_INSTANCE;
} else if ("float-non-negative".equals(typeLocalName)) {
return FloatingPointExponentNonNegative.THE_INSTANCE;
} else if ("float-positive".equals(typeLocalName)) {
return FloatingPointExponentPositive.THE_INSTANCE;
} else if ("mime-type-list".equals(typeLocalName)) {
return MimeTypeList.THE_INSTANCE;
} else if ("circle".equals(typeLocalName)) {
return Circle.THE_INSTANCE;
} else if ("rectangle".equals(typeLocalName)) {
return Rectangle.THE_INSTANCE;
} else if ("polyline".equals(typeLocalName)) {
return Polyline.THE_INSTANCE;
} else if ("xml-name".equals(typeLocalName)) {
return XmlName.THE_INSTANCE;
} else if ("meta-charset".equals(typeLocalName)) {
return MetaCharset.THE_INSTANCE;
} else if ("microdata-property".equals(typeLocalName)) {
return MicrodataProperty.THE_INSTANCE;
} else if ("charset".equals(typeLocalName)) {
return Charset.THE_INSTANCE;
} else if ("refresh".equals(typeLocalName)) {
return Refresh.THE_INSTANCE;
} else if ("paren-start".equals(typeLocalName)) {
return ParenthesisStart.THE_INSTANCE;
} else if ("paren-end".equals(typeLocalName)) {
return ParenthesisEnd.THE_INSTANCE;
} else if ("email-address".equals(typeLocalName)) {
return EmailAddress.THE_INSTANCE;
} else if ("email-address-list".equals(typeLocalName)) {
return EmailAddressList.THE_INSTANCE;
} else if ("keylabellist".equals(typeLocalName)) {
return KeyLabelList.THE_INSTANCE;
} else if ("zero".equals(typeLocalName)) {
return Zero.THE_INSTANCE;
} else if ("cdo-cdc-pair".equals(typeLocalName)) {
return CdoCdcPair.THE_INSTANCE;
} else if ("script".equals(typeLocalName)) {
return Script.THE_INSTANCE;
} else if ("script-documentation".equals(typeLocalName)) {
return ScriptDocumentation.THE_INSTANCE;
} else if ("functionbody".equals(typeLocalName)) {
return FunctionBody.THE_INSTANCE;
} else if ("a-rel".equals(typeLocalName)) {
return ARel.THE_INSTANCE;
} else if ("link-rel".equals(typeLocalName)) {
return LinkRel.THE_INSTANCE;
} else if ("meta-name".equals(typeLocalName)) {
return MetaName.THE_INSTANCE;
} else if ("non-empty-string".equals(typeLocalName)) {
return NonEmptyString.THE_INSTANCE;
} else if ("string-without-line-breaks".equals(typeLocalName)) {
return StringWithoutLineBreaks.THE_INSTANCE;
} else if ("simple-color".equals(typeLocalName)) {
return SimpleColor.THE_INSTANCE;
} else if ("time-datetime".equals(typeLocalName)) {
return TimeDatetime.THE_INSTANCE;
} else if ("svg-pathdata".equals(typeLocalName)) {
return new SvgPathData();
}
throw new DatatypeException("Unknown local name for datatype: " + typeLocalName);
}
}