<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- $Id$ --> 
<html>
<head>
<title>InsertText</title>
<link rel="stylesheet" type="text/css" href="Tapestry.css" title="style">
</head>

<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 <tr>
  <td align="left"><A href="Insert.html"><IMG alt=Insert src="common-images/prev.png"></a></td>  
  <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
  <td align="right"><A href="LinkSubmit.html"><IMG alt=LinkSubmit src="common-images/next.png"></a></td>  
 <tr>
 <tr>
  <td colspan="3"><hr></td>  
 </tr>
 <tr>
  <td colspan="3">
   <table border="0" cellpadding="4" cellspacing="4" width="100%">

<tr valign="top">
 <td>
  <table>
	 <tr>
	  <td><font size="+2"><b>InsertText</b></font></td>
	 </tr>
	 <tr>
	  <td>
		 <A href="../api/org/apache/tapestry/html/InsertText.html">
		 org.apache.tapestry.html.InsertText</a>
		</td>
	 </tr>
  </table>
 </td>
 <td>
  <table align="right" valign="middle" bgcolor="#c0c0c0" cellpadding="8">
	 <tr>
	  <td>
     Insert line One<br>
     Insert line Two
    </td>
	 </tr>
  </table>
 </td>
</tr>

<tr valign="center">
 <td colspan="2">&nbsp;</td>
</tr>

<tr>
 <td colspan="2">
  <b>Description</b>
	<br>
  Inserts multiline text, inserting &lt;br&gt; tags between each line, or
  adding &lt;p&gt; tags around each line.
  <p>
  A line is considered to be terminated by any 
            one of a line feed '\n', a carriage return '\r', or a carriage 
            return followed immediately by a linefeed "\r\n".</p>
             
 </td>
</tr>

<tr>
 <td colspan="2">
  <b>See Also</b>
	<br>
	<A href="Block.html">Block</a>, 
  <A href="Insert.html">Insert</a>,
  <a href="RenderBlock.html">RenderBlock</a>,
  <a href="RenderBody.html">RenderBody</a>
 </td>
</tr>

<tr>
 <td colspan="2">
  <b>Parameters</b>
	<br>
  <table border="1" cellpadding="4" cellspacing="4" class="parameters">
  <tr> 
    <th>Name</th>
    <th>Type</th>
	  <th>Direction</th>
    <th>Required</th> 
    <th>Default</th>
    <th>Description</th>
  </tr>
  <tr>
    <td>value</td>
    <td>String</td>
    <td>in</td>
   	<td>no</td>
		<td>&nbsp;</td>
		<td>The text to be inserted. If not provided, no output is written.</td>
	</tr>
  <tr>
    <td>mode</td>
    <td>
     <A href="../api/org/apache/tapestry/html/InsertTextMode.html">
     <tt>InsertTextMode</tt></a>
    </td>
    <td>in</td>
   	<td>no</td>
		<td>
     <A href="../api/org/apache/tapestry/html/InsertTextMode.html#BREAK">
     <tt>InsertTextMode.BREAK</tt></a>
    </td>
		<td>Identifies how to break apart lines for display [BREAK | PARAGRAPH].</td>
	</tr>
	</table>
            <P>Body: <STRONG>removed</STRONG><BR>Informal parameters: 
            <STRONG>forbidden</STRONG>
     <br>
  Reserved 
            parameters: <EM>none</EM> </P>
    
 </td>
</tr>

<tr>
 <td colspan="2">
  <b>Examples</b>
	<p>
  This example is under construction.</p>
      

 </td></tr></table>
</td></tr>
<tr>
 <td colspan="3"><hr></td>  
</tr>
<tr>
 <td align="left"><A href="Insert.html"><IMG alt=Insert src="common-images/prev.png"></a></td>  
 <td align="middle"><A href="index.html"><IMG alt="Component Index" src="common-images/home.png" ></a></td>  
 <td align="right"><A href="LinkSubmit.html"><IMG alt=LinkSubmit src="common-images/next.png"></a></td>  
</tr>
</table>

</body>
</html>