/************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 *
 * Copyright 2008, 2010 Oracle and/or its affiliates. All rights reserved.
 *
 * Use is subject to license terms.
 *
 * 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. You can also
 * obtain a copy of the License at http://odftoolkit.org/docs/license.txt
 *
 * 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.
 *
 ************************************************************************/

// !!! GENERATED SOURCE CODE !!!
package org.odftoolkit.odfdom.dom.style.props;

import org.odftoolkit.odfdom.pkg.OdfNamespace;
import org.odftoolkit.odfdom.pkg.OdfName;
import org.odftoolkit.odfdom.dom.OdfDocumentNamespace;

public interface OdfHeaderFooterProperties {
	public final static OdfStyleProperty BackgroundColor =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "background-color"));
	public final static OdfStyleProperty Border =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "border"));
	public final static OdfStyleProperty BorderBottom =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "border-bottom"));
	public final static OdfStyleProperty BorderLeft =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "border-left"));
	public final static OdfStyleProperty BorderRight =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "border-right"));
	public final static OdfStyleProperty BorderTop =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "border-top"));
	public final static OdfStyleProperty Margin =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "margin"));
	public final static OdfStyleProperty MarginBottom =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "margin-bottom"));
	public final static OdfStyleProperty MarginLeft =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "margin-left"));
	public final static OdfStyleProperty MarginRight =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "margin-right"));
	public final static OdfStyleProperty MarginTop =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "margin-top"));
	public final static OdfStyleProperty MinHeight =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "min-height"));
	public final static OdfStyleProperty Padding =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "padding"));
	public final static OdfStyleProperty PaddingBottom =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "padding-bottom"));
	public final static OdfStyleProperty PaddingLeft =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "padding-left"));
	public final static OdfStyleProperty PaddingRight =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "padding-right"));
	public final static OdfStyleProperty PaddingTop =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.FO, "padding-top"));
	public final static OdfStyleProperty BorderLineWidth =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.STYLE, "border-line-width"));
	public final static OdfStyleProperty BorderLineWidthBottom =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.STYLE, "border-line-width-bottom"));
	public final static OdfStyleProperty BorderLineWidthLeft =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.STYLE, "border-line-width-left"));
	public final static OdfStyleProperty BorderLineWidthRight =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.STYLE, "border-line-width-right"));
	public final static OdfStyleProperty BorderLineWidthTop =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.STYLE, "border-line-width-top"));
	public final static OdfStyleProperty DynamicSpacing =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.STYLE, "dynamic-spacing"));
	public final static OdfStyleProperty Shadow =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.STYLE, "shadow"));
	public final static OdfStyleProperty Height =
		OdfStyleProperty.get(OdfStylePropertiesSet.HeaderFooterProperties, OdfName.newName(OdfDocumentNamespace.SVG, "height"));
}
