<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html lang="en">
<HEAD>

<meta name="copyright" content="Copyright (c) Red Hat Inc. and others 2017. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
<TITLE>
The generic and extensible text editor
</TITLE>

<link rel="stylesheet" type="text/css" HREF="../book.css">
</HEAD>
<BODY BGCOLOR="#ffffff">
<H2 CLASS="Heading2">The generic and extensible text editor</H2>
<p>Instead of fully defining a new new editor, Platform Text does also provide a unique <em>generic and extensible text editor</em> that you can enrich to support your text files.
The features of this editor (hover, completion...) can be provided by plugin developers as regular extensions, without requiring to
define yet another editor. The approach is to contribute to the generic editor rather than creating a new editor.</p>
<p>To achieve that, the generic editor framework provides a few extension points that allow customers to enrich the editor according
to the <a href="runtime_content_using.htm">content-type</a> of the editor input. The generic editor takes care of either selecting the most
suitable extension for a given features, or to compose the multiple valid extensions and to present the aggregated result to user.</p>
<p>Here are the current extension points provided to augment the generic editor:</p>
<ul>
      <li>
        <a href="../reference/extension-points/org_eclipse_ui_genericeditor_presentationReconcilers.html">org.eclipse.ui.genericeditor.presentationReconciliers</a> for syntax highlighting.
      </li>
      <li>
        <a href="../reference/extension-points/org_eclipse_ui_genericeditor_contentAssistProcessors.html">org.eclipse.ui.genericeditor.contentAssistProcessors</a> for code completion/intellisense.
      </li>
      <li>
        <a href="../reference/extension-points/org_eclipse_ui_genericeditor_hoverProviders.html">org.eclipse.ui.genericeditor.hoverProviders</a> for hover documentation.
      </li>
      <li>
        <a href="../reference/extension-points/org_eclipse_ui_genericeditor_autoEditStrategies.html">org.eclipse.ui.genericeditor.autoEditStrategies</a> for auto-edit actions (auto-indent, closing braces or other automatic syntax addition).
      </li>
</ul>
The generic editor also provides some non-customizable features typically desired for any text editor such as:
<ul>
<li>asynchronous code completion</li>
<li><a href="resAdv_markers.htm">error markers</a> as underline and rules annotations, and enable details and quick-fixes on hover</li> 
</ul>
The generic editor inherits most features from the AbstractTextEditor so it integrates into the workbench like a regular text editor. So you can for example:
<ul>
<li>use common commands to trigger word-wrap, split editor, change font size...</li>
<li><a href="../reference/extension-points/org_eclipse_ui_editors.html#editorContentTypeBinding">associate the generic editor with a given content-type</a></li>
<li>create useful adapters, for example to an <a href="editors_workbench_outliner.htm">outline</a> (a recommendation would be to make such adapter work according to the content-type rather than according to the editor, and to implement the outline with the Common Navigator Framework)</li>
<li>...</li>
</ul>
<p>Validation of the document, synchronization with a model and error discovery are not part of the generic editor per-se, although the generic editor allows
to interact with the reported problems. The recommended way is to make <a href="editors_documents.htm">document processing</a> independent from the editor, and to rely on <a href="../reference/api/org/eclipse/jface/text/IDocumentListener.html">IDocumentListener</a> and <a href="editors_documents.htm#documentSetip">documentSetupParticipant extension</a> to react to immediate changes on the working copy,
or on <a href="../reference/api/org/eclipse/core/resources/IResourceChangeListener.html">IResourceChangeListener</a> to react on save. For best results in user experience, reacting to document change should be a fast operation, so any long computation and reporting operation should happen asynchronously in a non-blocking way.
</p>
<p>The generic editor works on plain text level and does <b>not</b> mandate the underlying document to be <a href="editors_documents.htm#Partitions">partitioned</a>, it's up to the individual extensions to the generic editor to consider partitioning or not, and to contribute some document partitioning if they need it.</p>

</BODY>
</HTML>
