<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.ui.internal.contentassist</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.ui.internal.contentassist</strong></font><br>
               Class XSLContentAssistProcessor</h2><br><hr><pre>public class <strong>XSLContentAssistProcessor</strong>
extends org.eclipse.wst.xsl.ui.provisional.contentassist.AbstractXSLContentAssistProcessor</pre>The XSL Content Assist Processor provides content assistance for various
 attributes values within the XSL Editor. This includes support for xpaths on
 select statements as well as on test and match attributes.<p></p><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_XSLContentAssistProcessor">XSLContentAssistProcessor</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>protected boolean</code></td><td width="" align="left"><code><a href="#method_assistanceOnAttribute">assistanceOnAttribute</a>(IDOMNode node
         ,
      ITextRegion aRegion)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr><tr valign="top"><td width="20%" align="right"><code>public ICompletionProposal[]</code></td><td width="" align="left"><code><a href="#method_computeCompletionProposals">computeCompletionProposals</a>(ITextViewer textViewer
         ,
      int documentPosition)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               CONTENT ASSIST STARTS HERE
 
 Return a list of proposed code completions based on the specified
 location within the document that corresponds to the current cursor
 position within the text-editor control.</td></tr><tr valign="top"><td width="20%" align="right"><code>public IContextInformation[]</code></td><td width="" align="left"><code><a href="#method_computeContextInformation">computeContextInformation</a>(ITextViewer viewer
         ,
      int offset)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               (non-Javadoc)</td></tr><tr valign="top"><td width="20%" align="right"><code>public char[]</code></td><td width="" align="left"><code><a href="#method_getContextInformationAutoActivationCharacters">getContextInformationAutoActivationCharacters</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               (non-Javadoc)</td></tr><tr valign="top"><td width="20%" align="right"><code>public IContextInformationValidator</code></td><td width="" align="left"><code><a href="#method_getContextInformationValidator">getContextInformationValidator</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               (non-Javadoc)</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_getMaximumVersion">getMaximumVersion</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </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_getMinimumVersion">getMinimumVersion</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               </td></tr><tr valign="top"><td width="20%" align="right"><code>public java.util.ArrayList</code></td><td width="" align="left"><code><a href="#method_getNamespaces">getNamespaces</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_XSLContentAssistProcessor">XSLContentAssistProcessor</a></h2><p><code>public <strong>XSLContentAssistProcessor</strong>()</code></p><p>Provides an XSL Content Assist Processor class that is XSL aware and XML
 aware.</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_assistanceOnAttribute">assistanceOnAttribute</a></h2><p><code>protected boolean <strong>assistanceOnAttribute</strong>(IDOMNode node
         ,
      ITextRegion aRegion)</code></p><p></p><h3>Parameters</h3><p><code>node</code></p><p><code>aRegion</code></p><h3>Returns</h3><p><code>boolean</code></p><hr><h2><a name="method_computeCompletionProposals">computeCompletionProposals</a></h2><p><code>public ICompletionProposal[] <strong>computeCompletionProposals</strong>(ITextViewer textViewer
         ,
      int documentPosition)</code></p><p>CONTENT ASSIST STARTS HERE
 
 Return a list of proposed code completions based on the specified
 location within the document that corresponds to the current cursor
 position within the text-editor control.</p><h3>Parameters</h3><p><code>textViewer</code></p><p><code>documentPosition</code> - - the cursor location within the document</p><h3>Returns</h3><p><code>ICompletionProposal[]</code> - an array of ICompletionProposal</p><hr><h2><a name="method_computeContextInformation">computeContextInformation</a></h2><p><code>public IContextInformation[] <strong>computeContextInformation</strong>(ITextViewer viewer
         ,
      int offset)</code></p><p>(non-Javadoc)</p><h3>Parameters</h3><p><code>viewer</code></p><p><code>offset</code></p><h3>Returns</h3><p><code>IContextInformation[]</code></p><hr><h2><a name="method_getContextInformationAutoActivationCharacters">getContextInformationAutoActivationCharacters</a></h2><p><code>public char[] <strong>getContextInformationAutoActivationCharacters</strong>()</code></p><p>(non-Javadoc)</p><h3>Returns</h3><p><code>char[]</code></p><hr><h2><a name="method_getContextInformationValidator">getContextInformationValidator</a></h2><p><code>public IContextInformationValidator <strong>getContextInformationValidator</strong>()</code></p><p>(non-Javadoc)</p><h3>Returns</h3><p><code>IContextInformationValidator</code></p><hr><h2><a name="method_getMaximumVersion">getMaximumVersion</a></h2><p><code>public java.lang.String <strong>getMaximumVersion</strong>()</code></p><p></p><h3>Returns</h3><p><code>java.lang.String</code></p><hr><h2><a name="method_getMinimumVersion">getMinimumVersion</a></h2><p><code>public java.lang.String <strong>getMinimumVersion</strong>()</code></p><p></p><h3>Returns</h3><p><code>java.lang.String</code></p><hr><h2><a name="method_getNamespaces">getNamespaces</a></h2><p><code>public java.util.ArrayList <strong>getNamespaces</strong>()</code></p><p></p><h3>Returns</h3><p><code>java.util.ArrayList</code></p><hr></body></html>