<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Eclipse Rich Client Text Infrastructure</title>
</head>

<body>

<table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" >
  <tr> 
    <td ALIGN=LEFT VALIGN=TOP COLSPAN="2" BGCOLOR="#595791"><font face="Arial,Helvetica"><font color="#FFFFFF">Eclipse Rich Client Platform - Text Infrastructure</font></font></td>
  </tr>
  <tr>
    <td ALIGN=RIGHT VALIGN=TOP WIDTH="2%"><img SRC="http://dev.eclipse.org/images/Adarrow.gif" NOSAVE BORDER=0 height=16 width=16></td>
    <td WIDTH="98%"><b>Eclipse Rich Client Platform</b>

<p>
The <a href="http://wiki.eclipse.org/index.php/Rich_Client_Platform">rich client platform</a> (RCP) is a major theme since Eclipse 3.0. As many applications provide some sort
of text editing, an optional RCP Text component is provided.
</p>
</td>
</tr>

<tr>
    <td ALIGN=RIGHT VALIGN=TOP WIDTH="2%"><img SRC="http://dev.eclipse.org/images/Adarrow.gif" NOSAVE BORDER=0 height=16 width=16></td>
    <td WIDTH="98%"><b>Optional Text Editing Components</b>
<p>
Applications that want to offer text editing capabilities may include the following eclipse plug-ins which are
an optional part of RCP i.e. they are not included in the <em>RCP Runtime Binary</em> available from the <a href="http://download.eclipse.org/eclipse/downloads/">Eclipse Project download page</a>
but they can be extracted from the <em>Platform Runtime Binary</em> download):
</p>
<ul>
<li><tt>org.eclipse.text</tt></li>
<li><tt>org.eclipse.jface.text</tt></li>
<li><tt>org.eclipse.ui.workbench.texteditor</tt></li>
<li><strong>since 3.3:</strong> <tt>org.eclipse.ui.editors</tt> - provides a Text editor but drags in plug-ins like:
	<ul>
		<li><tt>org.eclipse.ui.ide</tt></li>
 		<li><tt>org.eclipse.core.resources</tt></li>
	</ul>
	Use this if the resulting size of your RCP isn't important and you don't want to write your own editor.
</li>
</ul>
</td>

<tr>
    <td ALIGN=RIGHT VALIGN=TOP WIDTH="2%"><img SRC="http://dev.eclipse.org/images/Adarrow.gif" NOSAVE BORDER=0 height=16 width=16></td>
    <td VALIGN=TOP width="200px"><b>RCP Text Editor Example</b>
<img src="texteditor/rcp_editor.png" align="right">
<p>
  The RCP Text Editor Example is a simple RCP application that creates own text editors using the text editing infrastructure (an optional RCP component) and offers text editing capabilities such as shifting, moving and deleting lines, find/replace, auto-completion and basic syntax highlighting for markup languages. See also the <a href="texteditor/rcp_texteditor_ex.html">documentation and implementation notes</a>.
</p>
  <p>
  To load the RCP text editor example source into your workspace:
  <ol>
	  <li>Download the <a href="texteditor/org.eclipse.ui.examples.rcp.texteditor_3.7.0.src.zip">texteditor source plug-in</a> and save it on your harddisk.</li>
	  <li>Choose File > Import... > Existing Project into Workspace.
	  <li>Click the Browse... button to select the zip file you downloaded in step 1.
	  <li>Press Finish.
  </ol>
  To run the example from your workspace:
  <ol>
	  <li>Choose Run > Run Configurations...
	  <li>Under 'Eclipse Application', there should be a new launch configuration: 'RCP Text Editor'.
	  <li>Click 'Run'.
	  <li>When the RCP Text Editor Example window opens, use File > Open to open a plain text, .xml, or .html file.
  </ol>
  </p>
  </td>
  </tr>

<tr>
    <td ALIGN=RIGHT VALIGN=TOP WIDTH="2%"><img SRC="http://dev.eclipse.org/images/Adarrow.gif" NOSAVE BORDER=0 height=16 width=16></td>
    <td VALIGN=TOP width="200px"><b>Default Text Editor Example (requires R3.3 or later)</b>
    <p>
    This example shows how to use the Eclipse Text editor in your RCP application. As mentioned above this
    requires to add several additional plug-ins and hence increases the size of the resulting RCP application.
    </p>
  <p> To load the default Text editor example source into your workspace:
  <ol>
	  <li>Download the <a href="texteditor/org.eclipse.ui.examples.texteditor_3.7.0.src.zip">texteditor source plug-in</a> and save it on your harddisk.</li>
	  <li>Choose File > Import... > Existing Project into Workspace.
	  <li>Click the Browse... button to select the zip file you downloaded in step 1.
	  <li>Press Finish.
  </ol>
  </p>
  <p>
  To run the example from your workspace:
  <ol>
	  <li>Choose Run > Run Configurations...</li>
	  <li>Under 'Eclipse Application', there should be a new launch configuration: 'RCP Text Editor'.</li>
	  <li>Click Run.</li>
	  <li>When the RCP Text Editor Example window opens, use File > Open to open a plain text, .xml, or .html file.</li>
  </ol>
  </p>
</tr>
  
  
  </table>
</body>

</html>
