<!-- 
	DO NOT EDIT THIS FILE WITH HTML EDITORS
-->

<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>

<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <meta name="GENERATOR" content="Mozilla/4.76 [en] (Windows NT 5.0; U) [Netscape]">
   <title>Eclipse 3.1 Platform Build Notes - Text</title>
<link rel="stylesheet" href="http://dev.eclipse.org/default_style.css" type="text/css">
</head>

<body>
<h1>
Eclipse 3.1 Platform Build Notes<br>
Text</h1>
To see which bugs have been addressed in one of the builds simply open the <a href="http://bugs.eclipse.org/bugs/query.cgi?short_desc_type=allwordssubstr&amp;product=Platform&amp;component=Text&amp;long_desc_type=allwordssubstr&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;keywords_type=allwords&amp;keywords=&amp;emailtype1=substring&amp;email1=&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;changedin=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;namedcmd=Assigned&amp;newqueryname=&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">Platform-Text bugzilla query page</a>, select status, resolution and the time frame.
<br>
<br>
<br>
========== Eclipse Build Input May 27th 2005 (RC1) ==========<br>
<pre>
- added ICompletionProposalExtension4
- added the auto-insertable property to org.eclipse.jfact.text.templates.Template, adding an additional constructor
  and deprecating an old one. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=81701.
- bug fixing
</pre>
========== Eclipse Build Input May 10th 2005 ==========<br>
<pre>
- released new artwork for projection annotations
- bug fixing
</pre>
========== Eclipse Build Input April 26th 2005 ==========<br>
<pre>
- added modification stamp to document and document event
- file buffers are now non-dirty after the document change is undone that caused switch into dirty state
- bug fixing
</pre>
========== Eclipse Build Input April 19th 2005 ==========<br>
<pre>
- converted text plug-ins to JARed format
- bug fixing
</pre>
========== Eclipse Build Input April 12th 2005 ==========<br>
<pre>
- moved relevant portions from plugin.xml to newly created MANIFEST.MF
- bug fixing
</pre>
========== Eclipse Build Input March 29th 2005 ==========<br>
<pre>
- added undo history size to general text editors preference page
- bug fixing
</pre>
========== Eclipse Build Input March 22th 2005 ==========<br>
<pre>
- adapted undo manager to new operation support
- bug fixing
</pre>
========== Eclipse Build Input March 1st 2005 ==========<br>
<pre>
- added a ctor taking an RGB as parameter to DefaultHyperlinkPresenter
</pre>
========== Eclipse Build Input February 8th 2005 ==========<br>
<pre>
- added ProjectionAnnotation.getCaptionOffset which allows folding providers
  to specify which line of a folded-away region should be used as the caption
  that remains visible in the document. This change is binary compatible, but
  could break clients that already define such a method.
- moved the "Change Encoding..." action from "File" > "Conversion" to "Edit"
- renamed "File" > "Conversion" to "File" > "Convert Line Delimiters To"
</pre>
========== Eclipse Build Input February 1st 2005 ==========<br>
<pre>
- added FastPartitioner, replacing DefaultPartitioner which is deprecated.
  FastPartitioner has the same interface as DefaultPartitioner, but internally
  caches the partitioning positions set on the document to avoid multiple array
  creations. Current users of DefaultPartitioner are encouraged to migrate to
  FastPartitioner; subclasses of DefaultPartitioner that do not modify the positions 
  will work when subclassing FastPartioner as well, those that do will need to call
  clearPositionCache() when positions are modified.
- encoding change dialog now rejects invalid encodings
</pre>
========== Eclipse Build Input January 25th 2005 ==========<br>
<pre>
- added Hippie (emacs style) Completion, contributed by Genady Beryozkin. The action (bound to Alt+/ per default)
  scans all open editors for completions to the current prefix and cycles through the completions.
- bug fixing
</pre>
========== Eclipse Build Input January 18th 2005 ==========<br>
<pre>
- bug fixing
</pre>
========== Eclipse Build Input January 11th 2005 ==========<br>
<pre>
- bug fixing
</pre>
========== Eclipse Build Input January 4th 2005 ==========<br>
<pre>
- Quick Diff:
	- added org.eclipse.jface.text.source.ILineDifferExtension extension interface to ILineDiffer

- Templates:
	- deprecated all setters on org.eclipse.jface.text.templates.Template. Template
	  is really a value object and should not be modified any longer.
	- In order to handle the above change, deprecated TemplatePreferencePage.createEditTemplateDialog.
	  Subclasses really don't need to display a dialog if they don't want. Editing or adding a template
	  can be customized through the new hook method editTemplate method.
- bug fixing
</pre>
========== Eclipse Build Input December 14th 2004 ==========<br>
<pre>
- added Spelling API to org.eclipse.ui.workbench.texteditor plug-in:
	- The API is still under construction, provide feedback in
	  https://bugs.eclipse.org/bugs/show_bug.cgi?id=77353.
	- New package: org.eclipse.ui.texteditor.spelling
	- New extension-point: org.eclipse.ui.workbench.texteditor.spellingEngine
	- A spelling client can spell-check a document by calling
	  SpellingService#check(IDocument document, IRegion[] regions, SpellingContext context, ISpellingProblemCollector collector, IProgressMonitor monitor).
	  The supplied SpellingContext allows the spelling engine to determine
	  settings specific to this check. Each spelling error is reported to the
	  supplied ISpellingProblemCollector as SpellingProblem.
	  For example, see org.eclipse.jdt.internal.ui.text.spelling.JavaSpellingReconcileStrategy
	  and org.eclipse.jdt.internal.ui.text.spelling.JavaSpellingReconcileStrategy.SpellingProblemCollector.
	- The org.eclipse.ui.editors plug-in provides access to a system-wide instance of
	  SpellingService with org.eclipse.ui.editors.text.EditorsUI#getSpellingService()
	  and registers a preference page for configuring the SpellingService's and
	  the spelling engines' preferences. The SpellingService's preferences are whether
	  spelling is enabled and which spelling engine is used. (The spelling preference page
	  shows a combo box for chosing the used engine only if more than one engine
	  is present.)
	  See org.eclipse.ui.texteditor.spelling.SpellingService and
	  the General > Editors > All Text Editors > Spelling preference page.
	- A spelling engine implementer must implement ISpellingEngine and extend
	  the org.eclipse.ui.workbench.texteditor.spellingEngine extension-point.
	  The implementation of ISpellingEngine#check(IDocument document, IRegion[] regions, SpellingContext context, ISpellingProblemCollector collector, IProgressMonitor monitor)
	  reports any spelling errors to the given ISpellingProblemCollector as SpellingProblem.
	  Note that the engine must not call ISpellingProblemCollector#beginReporting()
	  or ISpellingProblemCollector#endReporting() as this is done by the spelling
	  infrastructure.
	  For example, see org.eclipse.jdt.internal.ui.text.spelling.DefaultSpellingEngine
	  and org.eclipse.jdt.internal.ui.text.spelling.JavaSpellingProblem.
	- A spelling engine implementer can implement ISpellingPreferenceBlock and specify
	  the implementing class with the extension. A ISpellingPreferenceBlock provides
	  a UI for preferences specific to the spelling engine. If the user-supplied preference
	  values are not valid, the preference block should notify the IPreferenceStatusMonitor
	  it received on ISpellingPreferenceBlock#initialize(IPreferenceStatusMonitor), such
	  that the containing preference page can provide corresponding indication to the user.
	  For example, see org.eclipse.jdt.internal.ui.preferences.SpellingPreferenceBlock and
	  the General > Editors > All Text Editors > Spelling preference page.
	- Extension specification example from the org.eclipse.jdt.ui plug-in's plugin.xml:
		    &lt;extension point="org.eclipse.ui.workbench.texteditor.spellingEngine"&gt;
		        &lt;engine
		              preferencesClass="org.eclipse.jdt.internal.ui.preferences.SpellingPreferenceBlock"
		              label="%defaultSpellingEngine.label"
		              class="org.eclipse.jdt.internal.ui.text.spelling.DefaultSpellingEngine"
		              default="true"
		              id="org.eclipse.jdt.internal.ui.text.spelling.DefaultSpellingEngine"&gt;
		        &lt;/engine&gt;
		    &lt;/extension&gt;
	  
- bug fixing
</pre>
========== Eclipse Build Input November 30th 2004 ==========<br>
<pre>
- added new hyperlink support to text viewer and editors:
	- new package org.eclipse.jface.text.hyperlink
	- extended ITextEditor with ITextViewerExtension6
	- added shared/global text editor preference to
		- enable/disable hyperlinking (default: enabled)
		- set the hyperlink modifier key (default: MOD1 i.e. Ctrl or Command)
		- set the hyperlink color (default: blue)
	- SourceViewerConfiguration: clients using or subclassing it will now automatically
	  get hyperlinking for URLs (using MOD1 modifier).
	  - If hyperlinking is not desired then getHyperlinksEnabled(...) can be overwritten
	    to return false.
	  - To use the shared/global editor hyperlink preference either subclass
	    TextSourceViewerConfiguration or duplicate the getHyperlink* methods to your subclass
	    of SourceViewerConfiguration.
	    Note: your editor's preference store must be a ChainedPreferenceStore, e.g.
	  		  IPreferenceStore generalTextStore= EditorsUI.getPreferenceStore(); 
			  fChainedPreferenceStore= new ChainedPreferenceStore(new IPreferenceStore[] { YourPlugin.getPreferenceStore(), generalTextStore });
	 - additional hyperlink targets can be configured by extending SourceViewerConfiguration.getHyperlinkDetectors(...)
	   NOTE: In the feature it might (i.e. not sure yet) be possible to provide hyperlinking via
	   		 extension-point(s) and user-configurable it via preferences.
- preferences: 
  - moved many preferences that were available in all editors to a
    shared editor page (see Workbench>Editors>All Text Editors)
  - moved Java editor prefernce page under the Workbench>Editors node
  	- this is a temporary position due to the ongoing prefernce page reordering effor
  - removed some preferences:
  	- show overview ruler
  
- bug fixing
</pre>
========== Eclipse Build Input November 23th 2004 ==========<br>
<pre>
- moved adapter factory registration from plug-in class to extension point
- bug fixing
</pre>
========== Eclipse Build Input September 21 2004 ==========<br>
<pre>
- the text editor now retargets the properties action i.e. the command to open
  the properties dialog is enabled when the text editor has focus
- there's a new Edit > Change Encoding... action which reuses the encoding
  field editor from the properties dialog
- EncodingActionGroup, IEncodingActionsConstants, IEncodingActionsDefinitionIds and
  IEncodingActionsHelpContextIds are no longer used and have been deprecated
- bug fixing

LinkedMode:
- LinkedModeModel: document changes outside of linked positions
  are now tolerated, as well as changes that do not lie completely inside a 
  position. Linked mode is still left if any disjointness constraints are violated
  by a change (changes to LinkedModeModel and LinkedPositionGroup)
- LinkedModeUI now controls the entire exit behavior, so all the exit logic
  is at one point. The UI includes a document listener now and exits the same
  way as LinkedModeModel did before
-> no binary changes, no functional changes for any clients that use LinkedModeUI and LinkedModeModel together.
</pre>
<br>
<br>
========== Eclipse Build Input July 2004 ==========<br>
<pre>
- bug fixing
</pre>
<br>
<br>
</body>
</html>