<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.ui.internal</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.ui.internal</strong></font><br>
               Class StructuredTextViewerConfigurationXSL</h2><br><hr><pre>public class <strong>StructuredTextViewerConfigurationXSL</strong>
extends StructuredTextViewerConfigurationXML</pre>StructuredTextViewerConfigurationXSL implements content assistance for
 attributes and other XPath related functionality.<p></p><hr><table width="100%" border="1"><tr bgcolor="#CCCCFF"><td width="100%"><h2>Constructor Summary</h2></td></tr><tr><td><code><strong><a href="#con_StructuredTextViewerConfigurationXSL">StructuredTextViewerConfigurationXSL</a></strong>()</code></td></tr></table><br><table width="100%" border="1"><tr cols="2" bgcolor="#CCCCFF"><td colspan="2" width="100%"><h2>Method Summary</h2></td></tr><tr valign="top"><td width="20%" align="right"><code>public java.lang.String[]</code></td><td width="" align="left"><code><a href="#method_getConfiguredContentTypes">getConfiguredContentTypes</a>(ISourceViewer sourceViewer)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               (non-Javadoc)</td></tr><tr valign="top"><td width="20%" align="right"><code>protected IContentAssistProcessor[]</code></td><td width="" align="left"><code><a href="#method_getContentAssistProcessors">getContentAssistProcessors</a>(ISourceViewer sourceViewer
         ,
      java.lang.String partitionType)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Return the processors for the current content type.</td></tr><tr valign="top"><td width="20%" align="right"><code>public IHyperlinkDetector[]</code></td><td width="" align="left"><code><a href="#method_getHyperlinkDetectors">getHyperlinkDetectors</a>(ISourceViewer sourceViewer)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               (non-Javadoc)</td></tr><tr valign="top"><td width="20%" align="right"><code>protected LineStyleProvider</code></td><td width="" align="left"><code><a href="#method_getLineStyleProviderForXSL">getLineStyleProviderForXSL</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr></table><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Constructor Detail
               </h2></td></tr></table><h2><a name="con_StructuredTextViewerConfigurationXSL">StructuredTextViewerConfigurationXSL</a></h2><p><code>public <strong>StructuredTextViewerConfigurationXSL</strong>()</code></p><p>Configuration for XSL Content Types</p><hr><table cols="2" width="100%" border="1"><tr colspan="2" width="100%" bgcolor="#CCCCFF" align="left"><td><h2>
                  Methods Detail
               </h2></td></tr></table><h2><a name="method_getConfiguredContentTypes">getConfiguredContentTypes</a></h2><p><code>public java.lang.String[] <strong>getConfiguredContentTypes</strong>(ISourceViewer sourceViewer)</code></p><p>(non-Javadoc)</p><h3>Parameters</h3><p><code>sourceViewer</code></p><h3>Returns</h3><p><code>java.lang.String[]</code></p><hr><h2><a name="method_getContentAssistProcessors">getContentAssistProcessors</a></h2><p><code>protected IContentAssistProcessor[] <strong>getContentAssistProcessors</strong>(ISourceViewer sourceViewer
         ,
      java.lang.String partitionType)</code></p><p>Return the processors for the current content type.</p><h3>Parameters</h3><p><code>sourceViewer</code></p><p><code>partitionType</code></p><h3>Returns</h3><p><code>IContentAssistProcessor[]</code></p><hr><h2><a name="method_getHyperlinkDetectors">getHyperlinkDetectors</a></h2><p><code>public IHyperlinkDetector[] <strong>getHyperlinkDetectors</strong>(ISourceViewer sourceViewer)</code></p><p>(non-Javadoc)</p><h3>Parameters</h3><p><code>sourceViewer</code></p><h3>Returns</h3><p><code>IHyperlinkDetector[]</code></p><hr><h2><a name="method_getLineStyleProviderForXSL">getLineStyleProviderForXSL</a></h2><p><code>protected LineStyleProvider <strong>getLineStyleProviderForXSL</strong>()</code></p><p></p><h3>Returns</h3><p><code>LineStyleProvider</code></p><hr></body></html>