################################################################
# Information for extension point overview document
################################################################
# Overview document title
title = JavaServer Faces Extension Points
header = JSF Extension Points 
# Introduction paragraph
overview = The following extension points can be used to extend the capabilities of the JSF infrastructure: 

# A list of the extension points that should be included in the
# extension point documentation.
listed-ext-points=org.eclipse.jst.jsf.common.annotationFiles,\
	org.eclipse.jst.jsf.common.contextSymbolFactory,\
	org.eclipse.jst.jsf.common.domainLoadingStrategies,\
	org.eclipse.jst.jsf.common.domainSourceModelTypeTranslators,\
	org.eclipse.jst.jsf.common.domainSourceModelTypes,\
	org.eclipse.jst.jsf.common.standardMetaDataFiles,\
	org.eclipse.jst.jsf.common.symbolSourceProvider,\
	org.eclipse.jst.jsf.core.AttributeValueRuntimeTypes,\
	org.eclipse.jst.jsf.core.MetaDataEnabledFeatures,\
	org.eclipse.jst.jsf.core.externalcontext,\
	org.eclipse.jst.jsf.core.jsfLibraries,\
	org.eclipse.jst.jsf.core.methodresolver,\
	org.eclipse.jst.jsf.core.pluginProvidedJsfLibraries,\
	org.eclipse.jst.jsf.core.propertyresolver,\
	org.eclipse.jst.jsf.core.variableresolver,\
	org.eclipse.jst.pagedesigner.cmRegistry,\
	org.eclipse.jst.pagedesigner.pageDesignerExtension,\
	org.eclipse.jst.pagedesigner.popupMenuContributor,\
	org.eclipse.jst.pagedesigner.propertyContributor,\
	org.eclipse.jst.pagedesigner.propertySections,\
	org.eclipse.jst.pagedesigner.tagCreationFactories