<html><body><p><font size="+1"><strong>Package org.eclipse.wst.xsl.debugger</strong></font></p><hr><h2><font size="-1"><strong>org.eclipse.wst.xsl.debugger</strong></font><br>
               Class IXSLDebugger</h2><br><hr><pre>public class <strong>IXSLDebugger</strong>
extends </pre>An interface to XSL debugger instances.<p></p><hr><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 void</code></td><td width="" align="left"><code><a href="#method_addBreakpoint">addBreakpoint</a>(org.eclipse.wst.xsl.debugger.BreakPoint breakpoint)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Add a breakpoint to this.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_addTransformer">addTransformer</a>(javax.xml.transform.Transformer transformer)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Add a transformer to this.</td></tr><tr valign="top"><td width="20%" align="right"><code>public org.eclipse.wst.xsl.debugger.Variable</code></td><td width="" align="left"><code><a href="#method_getVariable">getVariable</a>(int id)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Get the variable with the given id.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_quit">quit</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Quit debugging.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_removeBreakpoint">removeBreakpoint</a>(org.eclipse.wst.xsl.debugger.BreakPoint breakpoint)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Remove a breakpoint from this.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_resume">resume</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Perform a 'resume' operation.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_setEventWriter">setEventWriter</a>(java.io.Writer writer)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Set the Writer for this to write events to.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_setInvoker">setInvoker</a>(org.eclipse.wst.xsl.invoker.IProcessorInvoker invoker)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Set the invoker to use.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_setSource">setSource</a>(java.net.URL sourceURL)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Set the URL of the transformation source file.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_setTarget">setTarget</a>(javax.xml.transform.Result res)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Set the transformation Result.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_setTransformerFactory">setTransformerFactory</a>(javax.xml.transform.TransformerFactory factory)</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Set the transformer factory to use.</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_stack">stack</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Generate a string that represents the current call stack of frames and their variables.
 <p>
 Frames are generated with the following format: <i>file</i>|<i>frameId</i>|<i>lineNumber</i>|<i>name</i>
 This is immediately followed with the id's of the frame's variables (each variable id being unique for the whole process).
 </p>
 <p>
 The separator for frames is $$$. Within a frame, the separator for variable id's is |.
 </p>
 <p>
 e.g. file:/tran1.xsl|1|12|xsl:template name="temp1"|1|2|3$$$file:/tran2.xsl|2|34|xsl:template name="temp2"|4|5|6
 
 This defines 2 frames with id's 1 and 2, which are occur in files tran1.xsl and tran2.xsl respectively.
 Frame 1 is currently at line 12, in a template with name temp1, and it defines 3 variables with id's 1, 2 and 3. 
 </p></td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_stepInto">stepInto</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Perform a 'step into' operation.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_stepOver">stepOver</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Perform a 'step over' operation.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_stepReturn">stepReturn</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Perform a 'step return' operation.</td></tr><tr valign="top"><td width="20%" align="right"><code>public void</code></td><td width="" align="left"><code><a href="#method_suspend">suspend</a>()</code><br>
               &nbsp;&nbsp;&nbsp;&nbsp;
               Perform a 'suspend' operation.</td></tr></table><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_addBreakpoint">addBreakpoint</a></h2><p><code>public void <strong>addBreakpoint</strong>(org.eclipse.wst.xsl.debugger.BreakPoint breakpoint)</code></p><p>Add a breakpoint to this.</p><h3>Parameters</h3><p><code>breakpoint</code></p><hr><h2><a name="method_addTransformer">addTransformer</a></h2><p><code>public void <strong>addTransformer</strong>(javax.xml.transform.Transformer transformer)</code></p><p>Add a transformer to this.</p><h3>Parameters</h3><p><code>transformer</code></p><hr><h2><a name="method_getVariable">getVariable</a></h2><p><code>public org.eclipse.wst.xsl.debugger.Variable <strong>getVariable</strong>(int id)</code></p><p>Get the variable with the given id.</p><h3>Parameters</h3><p><code>id</code> - the id of the variable</p><h3>Returns</h3><p><code>org.eclipse.wst.xsl.debugger.Variable</code> - the variable</p><hr><h2><a name="method_quit">quit</a></h2><p><code>public void <strong>quit</strong>()</code></p><p>Quit debugging.</p><hr><h2><a name="method_removeBreakpoint">removeBreakpoint</a></h2><p><code>public void <strong>removeBreakpoint</strong>(org.eclipse.wst.xsl.debugger.BreakPoint breakpoint)</code></p><p>Remove a breakpoint from this.</p><h3>Parameters</h3><p><code>breakpoint</code></p><hr><h2><a name="method_resume">resume</a></h2><p><code>public void <strong>resume</strong>()</code></p><p>Perform a 'resume' operation.</p><hr><h2><a name="method_setEventWriter">setEventWriter</a></h2><p><code>public void <strong>setEventWriter</strong>(java.io.Writer writer)</code></p><p>Set the Writer for this to write events to.</p><h3>Parameters</h3><p><code>writer</code> - the writer to write events to</p><hr><h2><a name="method_setInvoker">setInvoker</a></h2><p><code>public void <strong>setInvoker</strong>(org.eclipse.wst.xsl.invoker.IProcessorInvoker invoker)</code></p><p>Set the invoker to use.</p><h3>Parameters</h3><p><code>invoker</code> - the invoker to set</p><hr><h2><a name="method_setSource">setSource</a></h2><p><code>public void <strong>setSource</strong>(java.net.URL sourceURL)</code></p><p>Set the URL of the transformation source file.</p><h3>Parameters</h3><p><code>sourceURL</code> - the source URL</p><hr><h2><a name="method_setTarget">setTarget</a></h2><p><code>public void <strong>setTarget</strong>(javax.xml.transform.Result res)</code></p><p>Set the transformation Result.</p><h3>Parameters</h3><p><code>res</code> - the result</p><hr><h2><a name="method_setTransformerFactory">setTransformerFactory</a></h2><p><code>public void <strong>setTransformerFactory</strong>(javax.xml.transform.TransformerFactory factory)</code></p><p>Set the transformer factory to use.</p><h3>Parameters</h3><p><code>factory</code> - the factory to use</p><hr><h2><a name="method_stack">stack</a></h2><p><code>public java.lang.String <strong>stack</strong>()</code></p><p>Generate a string that represents the current call stack of frames and their variables.
 <p>
 Frames are generated with the following format: <i>file</i>|<i>frameId</i>|<i>lineNumber</i>|<i>name</i>
 This is immediately followed with the id's of the frame's variables (each variable id being unique for the whole process).
 </p>
 <p>
 The separator for frames is $$$. Within a frame, the separator for variable id's is |.
 </p>
 <p>
 e.g. file:/tran1.xsl|1|12|xsl:template name="temp1"|1|2|3$$$file:/tran2.xsl|2|34|xsl:template name="temp2"|4|5|6
 
 This defines 2 frames with id's 1 and 2, which are occur in files tran1.xsl and tran2.xsl respectively.
 Frame 1 is currently at line 12, in a template with name temp1, and it defines 3 variables with id's 1, 2 and 3. 
 </p></p><h3>Returns</h3><p><code>java.lang.String</code> - the generated string</p><hr><h2><a name="method_stepInto">stepInto</a></h2><p><code>public void <strong>stepInto</strong>()</code></p><p>Perform a 'step into' operation.</p><hr><h2><a name="method_stepOver">stepOver</a></h2><p><code>public void <strong>stepOver</strong>()</code></p><p>Perform a 'step over' operation.</p><hr><h2><a name="method_stepReturn">stepReturn</a></h2><p><code>public void <strong>stepReturn</strong>()</code></p><p>Perform a 'step return' operation.</p><hr><h2><a name="method_suspend">suspend</a></h2><p><code>public void <strong>suspend</strong>()</code></p><p>Perform a 'suspend' operation.</p><hr></body></html>