<?xml version="1.0" encoding="UTF-8"?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../nbbuild/javadoctools/apichanges.dtd">
<apichanges>
<apidefs>
<apidef name="text">Text API</apidef>
</apidefs>
<changes>
    <change id="PositionRef.Position">
        <api name="text"/>
        <summary>Implement Position interface for compatibility</summary>
        <version major="6" minor="64"/>
        <date day="25" month="5" year="2014"/>
        <author login="sdedic"/>
        <compatibility modification="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                PositionRef can provide a Position object, but does not itself implement
                the Position interface, although it can provide the <code>offset</code>.
                The change is just to formally implement the j.s.t.Position.
            </p>
        </description>
        <class name="PositionRef" package="org.openide.text"/>
        <issue number="244744"/>
    </change>
    <change id="NbDocument-getEditToBeUndoneOfType">
        <api name="text"/>
        <summary>Added NbDocument.getEditToBeUndoneOfType</summary>
        <version major="6" minor="49"/>
        <date day="10" month="5" year="2011"/>
        <author login="mmetelka"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Added NbDocument.getEditToBeUndoneOfType()
                and NbDocument.getEditToBeRedoneOfType()
                to retrieve custom undoable edits that wrap document-generated
                undoable edits.
            </p>
        </description>
        <class package="org.openide.text" name="NbDocument"/>
        <issue number="204828"/>
    </change>
      <change id="NbDocument.openDocument">
          <api name="text"/>
          <summary>Added methods <code>NbDocument.getDocument</code>, 
          <code>NbDocument.openDocument</code> with offset parameter and 
          <code>NbDocument.openDocument</code> with line and column parameter</summary>
          <version major="6" minor="46"/>
          <date day="21" month="3" year="2012"/>
          <author login="theofanis"/>
          <compatibility addition="yes"/>
          <description>
              <p>
                  First method gets the StyledDocument associated with a file while the other two 
                  are used to open the document associated with a file in the Editor window
                  in a position specified by the offset or line and column while
                  controlling open and visibility behavior.
              </p>
          </description>
          <class package="org.openide.text" name="NbDocument"/>
          <issue number="209058"/>
      </change>
    <change id="mark-commit-group">
        <api name="text"/>
        <summary>fix hole in commit-groups about empty commit group</summary>
        <version major="6" minor="40"/>
        <date day="20" month="7" year="2011"/>
        <author login="err"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Define semantics of a nested empty commit group.
                Add <code>MARK_COMMIT_GROUP</code> to fill a gap in API;
                It adds an inprogress commit-group and starts a new one.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditorSupport"/>
        <issue number="199568"/>
    </change>
    <change id="CE.closeLast.boolean">
        <api name="text"/>
        <summary>CloneableEditor.closeLast</summary>
        <version major="6" minor="39"/>
        <date day="1" month="6" year="2011"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" deletion="no"
          deprecation="yes" modification="no" semantic="compatible" 
        />
        <description>
            <p>
                <code>CloneableEditor</code> has a new utility method
                <code>closeLast</code>.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditor"/>
        <issue number="196810"/>
    </change>
    <change id="CE.associateLookup">
        <api name="text"/>
        <summary>CloneableEditor(associateLookup)</summary>
        <version major="6" minor="39"/>
        <date day="1" month="6" year="2011"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" deletion="no"
          deprecation="yes" modification="no" semantic="compatible" 
        />
        <description>
            <p>
                <code>CloneableEditor</code> offers new constructor
                that will reuse the lookup provided by its 
                <a href="@TOP@/org/openide/text/CloneableEditorSupport.html">CloneableEditorSupport</a>.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditor"/>
        <issue number="196810"/>
    </change>
    <change id="initializeBySupport">
        <api name="text"/>
        <summary>CloneableEditor.initializeBySupport</summary>
        <version major="6" minor="39"/>
        <date day="1" month="6" year="2011"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" deletion="no"
          deprecation="yes" modification="no" semantic="compatible" 
        />
        <description>
            <p>
                Subclasses of <code>CloneableEditor</code> can manually request own 
                initialization by calling its
                <a href="@TOP@/org/openide/text/CloneableEditor.html#initializeBySupport--">initializeBySupport</a>
                method.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditor"/>
        <issue number="196810"/>
    </change>
    <change id="NbDocument-Annotatable">
        <api name="text"/>
        <summary>NbDocument.Annotatable threading changes</summary>
        <version major="6" minor="35"/>
        <date day="7" month="2" year="2011"/>
        <author login="mmetelka"/>
        <compatibility semantic="incompatible"/>
        <description>
            <p>
                <code>addAnnotation()</code> and <code>removeAnnotation()</code>
                no longer re-plan their work into EDT.
            </p>
        </description>
        <class package="org.openide.text" name="NbDocument"/>
        <issue number="194816"/>
    </change>
    <change id="commit-groups">
        <api name="text"/>
        <summary>Better support for vi mode</summary>
        <version major="6" minor="34"/>
        <date day="24" month="11" year="2010"/>
        <author login="err"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Support for chunking edits via <code>BEGIN_COMMIT_GROUP</code>
                and <code>END_COMMIT_GROUP</code>.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditorSupport"/>
        <issue number="103467"/>
    </change>
    <change id="Editors-TabActions">
        <api name="text"/>
        <summary>Ability to inject actions into editor tab context menus</summary>
        <version major="6" minor="32"/>
        <date day="16" month="8" year="2010"/>
        <author login="jglick"/>
        <compatibility addition="yes"/>
        <description>
            <p>
                Actions may now be placed in <code>Editors/TabActions</code> to add
                them to the context menu of the tab of an editor window.
            </p>
        </description>
        <issue number="189320"/>
    </change>
    <change id="NbDocument-style-constants-deprecated">
        <api name="text"/>
        <summary>Deprecating style constants in NbDocument</summary>
        <version major="6" minor="29"/>
        <date day="21" month="12" year="2009"/>
        <author login="vstejskal"/>
        <compatibility addition="no" deletion="no" modification="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
            Deprecating <code>BREAKPOINT_STYLE_NAME</code>, <code>ERROR_STYLE_NAME</code>,
            <code>CURRENT_STYLE_NAME</code>, <code>NORMAL_STYLE_NAME</code> in <code>NbDocument</code> class.
            Document styles have been abandoned when <code>Annotation</code>s API was created.
            These constants are no longer functional.
            </p>
        </description>
        <class package="org.openide.text" name="NbDocument"/>
        <issue number="97517"/>
    </change>
    <change id="CloneableEditorSupport.asynchronousOpen">
        <api name="text"/>
        <summary>Add CloneableEditorSupport.asynchronousOpen</summary>
        <version major="6" minor="26"/>
        <date day="1" month="10" year="2009"/>
        <author login="mslama"/>
        <compatibility addition="yes" deletion="no" modification="no" binary="compatible" source="compatible"/>
        <description>
            <p>
            Add CloneableEditorSupport.asynchronous to control if CloneableEditorSupport.open opens document synchronously or not.
            If CloneableEditorSupport.asynchronous return true then CloneableEditorSupport.open opens document synchronously
            and handles UserQuestionException.
            If CloneableEditorSupport.asynchronous return false then CloneableEditorSupport.open does not open document. Document is then
            opened during initialization of CloneableEditor form non AWT thread and UserQuestionException is handled there.
            Implementation of method asynchronous in CloneableEditorSupport returns false ie. it keeps original behavior
            of CloneableEditorSupport.open. Subclasses can overwrite method asynchronous to return true to avoid blocking AWT thread by
            call CloneableEditorSupport.open which calls CloneableEditorSupport.openDocument.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditorSupport"/>
        <issue number="171713"/>
    </change>
    <change id="NbDocument.findRecentEditorPane">
        <api name="text"/>
        <summary>Add NbDocument.findRecentEditorPane</summary>
        <version major="6" minor="24"/>
        <date day="12" month="8" year="2009"/>
        <author login="mslama"/>
        <compatibility addition="yes" deletion="no" modification="no" binary="compatible" source="compatible"/>
        <description>
            <p>
            Add NbDocument.findRecentEditorPane to allow non blocking retrieval of recently selected editor pane.
            Method returns null when editor pane initialization is not finished. Client is notified about finished pane
            initialization by property change event EditorCookie.Observable.PROP_OPENED_PANES.
            NbDocument.findRecentEditorPane is replacement for EditorCookie.getOpenedPanes which waits till all editor
            panes are initialized. It is nonblocking only when EditorCookie is instanceof CloneableEditorSupport.
            </p>
        </description>
        <class package="org.openide.text" name="NbDocument"/>
        <issue number="168415"/>
    </change>
    <change id="Line.show">
        <api name="text"/>
        <summary>Improve Line.show</summary>
        <version major="6" minor="21"/>
        <date day="7" month="7" year="2008"/>
        <author login="mslama"/>
        <compatibility addition="yes" deletion="no" modification="no" binary="compatible" source="compatible"/>
        <description>
            <p>
            Improve Line.show to have better control over its open/visibility behavior. Previous version of Line.show
            mixes open and visibility behavior into one parameter. New version separates this into 2 parameters. It is
            possible to use any combination of these 2 parameters without need to add new constants for previous version.
            2 enum types ShowOpenType and ShowVisibilityType are added.
            </p>
        </description>
        <class package="org.openide.text" name="Line"/>
        <issue number="138146"/>
    </change>
    <change id="beforeSaveRunnable">
        <api name="text"/>
        <summary>"beforeSaveRunnable" document property</summary>
        <version major="6" minor="20"/>
        <date day="16" month="5" year="2008"/>
        <author login="mmetelka"/>
        <compatibility addition="yes" deletion="no" modification="no" binary="compatible" source="compatible"/>
        <description>
            <p>
            CloneableEditorSupport.saveDocument() checks document's "beforeSaveDocument" property
            for a Runnable to be executed before the actual save will be done.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditorSupport"/>
        <issue number="13063"/>
    </change>
    <change id="initializeOnBackground">
        <api name="text"/>
        <summary>EditorKit, Document and co. are loaded on background by default</summary>
        <version major="6" minor="18"/>
        <date day="25" month="3" year="2008"/>
        <author login="jtulach"/>
        <compatibility deletion="no" binary="compatible" source="compatible" modification="yes" semantic="incompatible"/>
        <description>
            <p>
            In order to speedup, or remove the load of initialization of kit in AWT during startup,
            the initialization is done outside of AWT thread as much as possible. This provides
            new <a href="@TOP@/architecture-summary.html#java-EditorKitInitialization">API for editor kits</a>, 
            one 
            <a href="@TOP@/architecture-summary.html#property-oldInitialization">component</a>
            and one 
            <a href="@TOP@/architecture-summary.html#property-org.openide.text.CloneableEditor.oldInitialization">system</a>
            property.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditor"/>
        <issue number="130171"/>
    </change>
    <change id="NbDocument.Colors">
        <api name="text"/>
        <summary>Public static inner class <code>NbDocument.Colors</code> moved to org.openide.options.</summary>
        <version major="6" minor="16"/>
        <date day="22" month="5" year="2007"/>
        <author login="mslama"/>
        <compatibility deletion="yes" binary="compatible" source="incompatible"/>
        <description>
            <p>
                Class <code>NbDocument.Colors</code> was removed to remove dependency on org.openide.options.
                Runtime backward compatibility was ensured by moving into org.openide.options module which is
                already deprecated.
            </p>
        </description>
        <class package="org.openide.text" name="NbDocument"/>
        <issue number="88531"/>
    </change>
    <change id="NbDocument.COLORS">
        <api name="text"/>
        <summary>Remove public field <code>NbDocument.COLORS</code></summary>
        <version major="6" minor="16"/>
        <date day="22" month="5" year="2007"/>
        <author login="mslama"/>
        <compatibility deletion="yes" binary="incompatible" source="incompatible"/>
        <description>
            <p>
                Field <code>NbDocument.COLORS</code> was removed to remove dependency on org.openide.options.
            </p>
        </description>
        <class package="org.openide.text" name="NbDocument"/>
        <issue number="88531"/>
    </change>
    <change id="PrintPreferences">
        <api name="text"/>
        <summary>Adding <code>PrintPreferences</code></summary>
        <version major="6" minor="16"/>
        <date day="22" month="5" year="2007"/>
        <author login="rmatous"/>
        <compatibility addition="yes" binary="compatible" source="compatible"/>
        <description>
            <p>
                Class <code>PrintPreferences</code> was added as replacement for original
                class <code>PrintSettings</code>.
            </p>
        </description>
        <class package="org.openide.text" name="PrintPreferences"/>
        <issue number="88531"/>
    </change>
    <change id="PrintSettings">
        <api name="text"/>
        <summary>Removing <code>PrintSettings</code></summary>
        <version major="6" minor="16"/>
        <date day="22" month="5" year="2007"/>
        <author login="rmatous"/>
        <compatibility deletion="yes" binary="compatible" source="incompatible"/>
        <description>
            <p>
                Classes <code>PrintSettings</code> and <code>PrintSettingsBeanInfo</code> 
                were removed. Runtime backward compatibility was ensured
                by moving both into org.openide.options module which is already deprecated.
            </p>
        </description>
        <class package="org.openide.text" name="PrintSettings" link="no"/>
        <issue number="88531"/>
    </change>
    <change id="Line.SHOW_REUSE">    
        <api name="text"/>
        <summary>Adding Line.SHOW_REUSE and Line.SHOW_REUSE_NEW constants for Line.show method</summary>
        <version major="6" minor="14"/>
        <date day="5" month="3" year="2007"/>
        <author login="pnejedly"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            <p>The <code>Line.show()</code> method accepts show mode constant,
            that influences the way the Line is displayed on the request.
            These additional constants provide new modes for opening the line
            in a shared editor window that can be replaced by subsequent calls of
            <code>Line.show(SHOW_REUSE)</code> on <code>Line</code>s from different
            <code>Document</code>. This is useful for quick source browsing without
            cluttering the UI with too many opened editors.
            </p>
        </description>
        <class package="org.openide.text" name="Line"/>
        <issue number="94607"/>
    </change>
    <change id="CloneableEditorSupportRedirector">
        <api name="text"/>
        <summary>CloneableEditorSupportRedirector</summary>
        <version major="6" minor="13"/>
        <date day="7" month="2" year="2007"/>
        <author login="jtulach"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            <p>The <a href="@TOP@/org/openide/text/CloneableEditorSupportRedirector.html">CloneableEditorSupportRedirector</a> 
            class allows a redirection of operations on a <code>CloneableEditorSupport</code>
            object to another one. This can be useful if there are two logical
            files representing one physical and one wants to have just a single
            editor for both files. In such case just implement the 
            <a href="@TOP@/org/openide/text/CloneableEditorSupportRedirector.html">CloneableEditorSupportRedirector</a>.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditorSupportRedirector"/>
        <issue number="51690"/>
    </change>

    <change id="CloneableEditorSupport.getEditorKit">
        <api name="text"/>
        <summary>Adding CloneableEditorSupport.getEditorKit method</summary>
        <version major="6" minor="12"/>
        <date day="2" month="8" year="2006"/>
        <author login="vstejskal"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            <p>The <code>CloneableEditorSupport.getEditorKit()</code> method
            allows to access <code>EditorKit</code>s registered in
            MimeLookup. This is meant to be the primary way of finding
            <code>EditorKit</code>s registered by Netbeans modules. The
            <code>JEditorPane.createEditorKitForContentType</code> and the
            other related methods in <code>JEditorPane</code> should only be
            used for finding <code>EditorKit</code>s provided by JDK.
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditorSupport"/>
        <issue number="52657"/>
    </change>

    <change id="EditorPaneDragAndDrop">
        <api name="text"/>
        <summary>Editor panes listen for special objects being dragged over them</summary>
        <version major="6" minor="11"/>
        <date day="30" month="5" year="2006"/>
        <author login="saubrecht"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            <p>The custom <code>JEditorPane</code> used by <code>CloneableEditor</code>
            has a custom <code>DropTarget</code>
            instance which listens for some special objects (usually files) being
            dragged over the editor pane and uses an instace of
            <code>ExternalDropHandler</code> class from the global
            <code>Lookup</code> to see if the drop can be accepted.
            If the dragged object is supported then the caret in the editor does
            not follow the cursor to indicate the drop position as if when dragging
            a text snippet and regular Drop-Copy cursor is shown instead.
            When the object is dropped into the editor the <code>ExternalDropHandler</code>
            will process it (e.g. opens the file in a new editor tab).
            </p>
        </description>
        <class package="org.openide.text" name="CloneableEditor"/>
        <issue number="50129"/>
    </change>

    <change id="CloneableEditorSupport-messageHtmlName">
        <api name="text"/>
        <summary>Added CloneableEditorSupport.messageHtmlName method</summary>
        <version major="6" minor="8"/>
        <date day="31" month="10" year="2005"/>
        <author login="dsimonek"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            <p>A <code>messageHtmlName</code> method has been added to
            CloneableEditorSupport to allow for display names with html tags.
            CloneableEditor uses this new method to set its html display name 
            correctly. Also <code>DataEditorSupport</code> now overrides 
            <code>messageHtmlName</code> to connect with <code>Node.getHtmlDisplayName</code>.</p>
        </description>
        <class package="org.openide.text" name="CloneableEditorSupport"/>
        <class package="org.openide.text" name="CloneableEditor"/>
        <class package="org.openide.text" name="DataEditorSupport" link="no" />
        <issue number="66777"/>
    </change>

    <change id="ActiveEditorDrop">
        <api name="text"/>
        <summary>Added ActiveEditorDrop interface</summary>
        <version major="6" minor="6"/>
        <date day="9" month="8" year="2005"/>
        <author login="mroskanin"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            <p>An <code>ActiveEditorDrop</code> interface has been added due to 
                drag and drop callback support described at <a href="http://www.netbeans.org/issues/show_bug.cgi?id=61367">issue #61367</a>
            </p>
        </description>
        <class package="org.openide.text" name="ActiveEditorDrop"/>
        <issue number="61367"/>
    </change>
    <change id="CloneableEditorSupport-wrapEditorComponent">
        <api name="text"/>
        <summary>Added CloneableEditorSupport.wrapEditorComponent</summary>
        <version major="6" minor="4"/>
        <date day="22" month="7" year="2005"/>
        <author login="abadea"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            <p>A <code>wrapEditorComponent</code> method has been added to
            CloneableEditorSupport allowing to wrap the editor component
            in another component.</p>
        </description>
        <class package="org.openide.text" name="CloneableEditorSupport"/>
        <class package="org.openide.text" name="CloneableEditor"/>
        <issue number="60922"/>
    </change>
    <change id="annotations-error-stripe">
        <api name="text"/>
        <summary>Annotation type extended with <code>severity</code>, <code>custom_sidebar_color</code>, <code>browsable</code> and <code>priority</code>
                 attributes
        </summary>
        <version major="6" minor="3"/>
        <date day="18" month="7" year="2005"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            Annotation type was extended with <code>severity</code>, <code>custom_sidebar_color</code>, <code>browsable</code> and <code>priority</code>
                 attributes.
        </description>
        <issue number="55639"/>
    </change>
<change id="Line.SHOW_TOFRONT">
        <api name="text"/>
        <summary>Added a new constant <code>Line.SHOW_TOFRONT</code>
</summary>
        <version major="5" minor="8"/>
        <date day="21" month="3" year="2005"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            The new constant is used in the <code>EditorSupportLineSet</code> and brings 
            editor's parent <code>Window</code> to be fronted above all other top-level windows.
        </description>
        <class package="org.openide.text" name="Line"/>
        <issue number="47825"/>
    </change>
<change id="CloneableEditor-openAt">
      <api name="text"/>
      <summary>CloneableEditor.openAt made protected</summary>
      <version major="5" minor="2"/>
      <date day="6" month="12" year="2004"/>
      <author login="pnejedly"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <p>Deprecated <code>EditorSupport</code> has had a method
	<code>openAt</code>, which has no easy replacement in
	<code>CloneableEditorSupport</code>.
	The method is implemented in <code>CloneableEditorSupport</code>,
	but is package private. This change makes it protected.
        </p>
      </description>
      <class package="org.openide.text" name="CloneableEditorSupport"/>
      <issue number="51441"/>
    </change>
    <change id="not-calling-CloneableEditorSupport-notifyModified-that-often">
      <api name="text"/>
      <summary>
<code>CloneableEditorSupport.notifyModified</code> is called only on first modification</summary>
      <version major="5" minor="4"/>
      <date day="14" month="1" year="2005"/>
      <author login="jtulach"/>
      <compatibility binary="compatible" source="compatible" semantic="incompatible" deprecation="no" addition="no" deletion="no" modification="no"/>
      <description>
        <p>
        It has been found that <code>CloneableEditorSupport.notifyModified</code>
        is called more often than it should. It used to be called after every
        keystroke, which is bad, as its return value could not be honored - 
        it is not possible to prevent modification when the document is already
        modified. Now the method is called only on first modification of the
        document and if it returns false, the modification is not allowed.
        <br/>
        This may be incompatible for clients that relied on the often calls.
        Such clients need to be fixed.
        </p>
      </description>
      <class package="org.openide.text" name="CloneableEditorSupport"/>
      <issue number="52493"/>
    </change>
<change id="CloneableEditorSupport.Pane">
        <api name="text"/>
        <summary>Enhance SPI interface for CloneableEditorSupport.Pane providers</summary>
        <version major="4" minor="45"/>
        <date day="24" month="8" year="2004"/>
        <author login="mleint"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
            Additional method to <code>CloneableEditorSupport.Pane</code> interface,
            <code>Pane.ensureVisible()</code>. The implementing classes should ensure that the pane's component
            is open and visible after calling this method. Is used in <code>CloneableEditorSupport.openAt()</code>.
        </description>
        <issue number="46127"/>
    </change>
<change>
     <api name="text"/>
     <summary>Line.getOriginalLineNumber</summary>
     <version major="4" minor="38"/>
     <date day="8" month="6" year="2004"/>
     <author login="jtulach"/>
     <compatibility binary="compatible" addition="yes" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
        A method that for a given line computes its original
        line number. Is useful when user edits text and places a breakpoint
        to find out what was the original line that the breakpoint should
        be placed to.
     </description>
     <class package="org.openide.text" name="Line"/>
     <issue number="43484"/>
    </change>
<change>
    <api name="text"/>
    <summary>Allow custom toolbar for NbDocument impls, editor panes separation in editor support classes</summary>
    <version major="4" minor="31"/>
    <date day="20" month="4" year="2004"/>
    <author login="mkleint"/>
    <compatibility addition="yes" modification="yes" deprecation="yes" semantic="compatible" binary="compatible" source="compatible" deletion="no"/>
    <description>
        In order to implement MultiViews, these changes were necessary to the org.openide.text package.
        <ul>
            <li>Added new subinterface to NbDocument -&gt; NbDocument.CustomToolbar which lets the implementors to define a custom toolbar. 
            It allows to present the toolbar in different environments (eg. multiviews)</li>
            <li>CloneableEditorSupport defined a new interface CloneableEditorSupport.Pane and has a new protected method createPane() </li>
            <li>The deprecated EditorSupport has a new protected method createPane() </li>
            <li>CloneableEditor implements CloneableEditorSupport.Pane, thus 
            updateTitle was changed from protected to public and 2 additional methods from Pane interfacewere added</li>
            
        </ul>
    </description>
    <class package="org.openide.text" name="NbDocument"/>
    <class package="org.openide.text" name="CloneableEditorSupport"/>
    <class package="org.openide.text" name="CloneableEditor"/>
    <class package="org.openide.text" name="EditorSupport" link="no" />
    <issue number="41085"/>
    </change>
<change>
    <api name="text"/>
    <summary>Support for AnnotationProvider interface</summary>
    <version major="4" minor="30"/>
    <date day="30" month="4" year="2004"/>
    <author login="pnejedly"/>
    <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
    <description>
        <ul>
            <li>Added interface org.openide.text.AnnotationProvider</li>
            <li>Call all instances of the interface found in the global lookup
	      when going to visualize given Annotatable.
	    </li>
        </ul>
    </description>
    <class package="org.openide.text" name="AnnotationProvider"/>
    <issue number="41345"/>
    </change>
<change>
        <api name="text"/>
        <summary>Allow CloneableEditorSupport subclasses to specify
	   persistence ID for the associated editor TopComponent.
        </summary>
        <version major="4" minor="24"/> 
        <date day="2" month="2" year="2004"/>
        <author login="pnejedly"/>
        <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
        <description>
                Adding protected <code>CloneableEditorSupport.documentID</code>
                to allow subclasses to compute preferred ID String used for
                TopComponent persistence.
        </description>
        <class package="org.openide.text" name="CloneableEditorSupport"/>
        <issue number="37892"/>
    </change>
<change>
     <api name="text"/>
     <summary>New <code>getInputStream()</code> method in CloneableEditorSupport</summary>
     <version major="4" minor="7"/>
     <date day="26" month="6" year="2003"/>
     <author login="pjiricka"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
       New method that returns an InputStream which reads the current data
       from the editor, taking into account the encoding of the file. 
       The returned InputStream contains the same data as if the file was written 
       out to the disk. Useful when interacting with a tool that expects an InputStream,
       and the current (possibly modified) content of the editor is desired.
     </description>
     <class package="org.openide.text" name="CloneableEditorSupport"/>
     <issue number="34692"/>
    </change>
<change>
     <api name="text"/>
     <summary>CloneableEditorSupport takes Lookup for its Lines in constructor</summary>
     <version major="4" minor="5"/>
     <date day="18" month="4" year="2003"/>
     <author login="jtulach"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
       Allows subclasses of the support DataEditorSupport, etc. pass 
       additional information to each of its Lines. Such information 
       can consist of location like DataObject or FileObject.
     </description>
     <class package="org.openide.text" name="CloneableEditorSupport"/>
     <issue number="32937"/>
    </change>
<change id="PositionRef-getEditorSupport">
     <api name="text"/>
     <summary>PositionRef.getEditorSupport() removed</summary>
     <version major="4" minor="3"/>
     <date day="2" month="4" year="2003"/>
     <author login="jtulach"/>
     <compatibility deletion="yes" binary="incompatible" source="incompatible" semantic="compatible" deprecation="no" addition="no" modification="no"/>
     <description>
        For a long time deprecated <code>PositionRef.getEditorSupport()</code> method
        has been removed to enabled separation of EditorSupport to openide-loaders.jar
     </description>
     <class package="org.openide.text" name="PositionRef"/>
     <class package="org.openide.text" name="DataEditorSupport" link="no" />
     <issue number="32143"/>
    </change>
<change id="Line-getDataObject">
     <api name="text"/>
     <summary>Line.getDataObject() removed</summary>
     <version major="4" minor="3"/>
     <date day="2" month="4" year="2003"/>
     <author login="jtulach"/>
     <compatibility addition="yes" deletion="yes" binary="incompatible" source="incompatible" semantic="compatible" deprecation="no" modification="no"/>
     <description>
        Due to separation of openide-loaders.jar the <code>Line.getDataObject()</code> 
        method had to be removed and replaced by <code>Line.getLookup</code> which 
        provides more general way for providing line context. The direct replacement 
        for the old method is <code>DataObject DataEditorSupport.findDataObject(Line)</code>.
     </description>
     <class package="org.openide.text" name="Line"/>
     <class package="org.openide.text" name="DataEditorSupport" link="no" />
     <issue number="32143"/>
    </change>
<change id="new_Line-DataObject">
     <api name="text"/>
     <summary>Line constructor changed</summary>
     <version major="4" minor="3"/>
     <date day="2" month="4" year="2003"/>
     <author login="jtulach"/>
     <compatibility addition="yes" deletion="yes" binary="incompatible" source="incompatible" semantic="compatible" deprecation="no" modification="no"/>
     <description>
        Due to separation of openide-loaders.jar the <code>Line</code> and 
        <code>DocumentLine</code> constructors taking DataObject had to be
        modified to take Lookup or plain Object instead. 
     </description>
     <class package="org.openide.text" name="Line"/>
     <class package="org.openide.text" name="DocumentLine"/>
     <issue number="32143"/>
    </change>
<change id="CloneableEditorSupport.messageLine">
     <api name="text"/>
     <summary>CloneableEditorSupport can provide display name for its Lines</summary>
     <version major="4" minor="3"/>
     <date day="2" month="4" year="2003"/>
     <author login="jtulach"/>
     <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
     <description>
        Added method <code>String messageLine (Line)</code> that can be
        overriden to provide meaningful display name for lines produced
        by this support.
     </description>
     <class package="org.openide.text" name="CloneableEditorSupport"/>
     <issue number="32143"/>
    </change>
<change id="Annotatable.getText">
      <api name="text"/>
      <summary>Get content of Annotatable</summary>
      <version major="1" minor="35"/>
      <date day="25" month="9" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added public abstract method
        <code>Annotatable.getText()</code>. Listeners can be attached to
	Annotatable.PROP_TEXT property.
      </description>
      <class package="org.openide.text" name="Annotatable"/>
    </change>
<change id="Annotatable-isDeleted-getAnnotationCount-final">
      <api name="text"/>
      <summary>Annotatable.isDeleted and Annotatable.getAnnotationCount are final</summary>
      <version major="1" minor="35"/>
      <date day="25" month="9" year="2001"/>
      <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no">
          This is not considered as incompatible change,
          because the API with these methods was not published yet.
      </compatibility>
      <description>
        The Annotatable.isDeleted and Annotatable.getAnnotationCount are final now.
      </description>
      <class package="org.openide.text" name="Annotatable"/>
    </change>
<change id="Line.mark-deprecated">
      <api name="text"/>
      <summary>
<code>Line</code> methods deprecated in favor of annotations</summary>
      <version major="1" minor="20"/>
      <date day="9" month="7" year="2001"/>
      <compatibility modification="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no"/>
      <description>
        Because of publication of Annotation API, all previously used methods like
        <code>setBreakpoint</code>, <code>isBreakpoint</code>,
        <code>markError</code>, <code>unmarkError</code>,
        <code>markCurrentLine</code>, <code>unmarkCurrentLine</code>, and
        <code>canBeMarkedCurrent</code> are deprecated. Use
        <code>Annotation.attach()</code> and <code>detach()</code> instead.
        <code>Line</code> now extends <code>Annotatable</code> abstract class.
      </description>
      <class package="org.openide.text" name="Line"/>
      <class package="org.openide.text" name="DocumentLine"/>
    </change>
<change>
      <api name="text"/>
      <summary>Refactoring of editor and open supports</summary>
      <date day="29" month="5" year="2000"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no">
        First broken, <date day="29" month="9" year="2000"/> restored backwards
        compatibility.
      </compatibility>
      <description>
        Major refactoring of <code>EditorSupport</code> and
        <code>OpenSupport</code>, so that subclasses can have much finer control
        over pieces of its functionality. 
      </description>
      <class package="org.openide.text" name="EditorSupport" link="no" />
      <class package="org.openide.text" name="CloneableEditorSupport"/>
      <class package="org.openide.text" name="CloneableEditor"/>
      <class package="org.openide.loaders" name="OpenSupport" link="no" />
      <class package="org.openide.windows" name="CloneableOpenSupport" link="no" />
    </change>
<change>
      <api name="text"/>
      <summary>Customization of editor support after creation</summary>
      <date day="1" month="12" year="2000"/>
      <author login=""/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added method <code>initializeCloneableEditor</code> to allow easier
        customization of the editor after creation and also after deserialization.
      </description>
      <class package="org.openide.text" name="CloneableEditorSupport"/>
      <branch name="release31">
        <date day="1" month="12" year="2000"/>
      </branch>
    </change>
<change>
      <api name="text"/>
      <summary>Can control title format for editor supports</summary>
      <date day="17" month="7" year="2000"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <code>updateTitles()</code> method was made protected final instead of
        private.
      </description>
      <class package="org.openide.text" name="CloneableEditorSupport"/>
    </change>
<change>
      <api name="text"/>
      <summary>Can control undo/redo on editor supports</summary>
      <date day="21" month="7" year="2000"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        <code>getUndoRedo()</code> method was made protected final instead of
        final.
      </description>
      <class package="org.openide.text" name="CloneableEditorSupport"/>
    </change>
<change>
      <api name="text"/>
      <summary><code>IndentEngine</code> a service type</summary>
      <date day="23" month="6" year="2000"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no">
        Until <date day="27" month="9" year="2000"/>, was incompatible
        (<code>register</code> had been deleted as it is no longer useful); the
        method was then restored but made deprecated.
      </compatibility>
      <description>
        Now a <code>ServiceType</code>. A few new methods relating to lookup.
      </description>
      <class package="org.openide.text" name="IndentEngine"/>
    </change>
<change>
      <api name="text"/>
      <summary><code>PrintSettings.getPageFormat</code> requires a printer job</summary>
      <date day="24" month="2" year="2000"/>
      <compatibility modification="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no">
        First removed, later re-added but deprecated in trunk and
        <code>boston</code>. User-stored settings of this class should be
        backwards compatible, however code directly calling
        <code>getPageFormat</code> will produce a deprecation warning. Probably no
        one should be directly referring to this class or its BeanInfo outside the
        package; public only because it is a system option that must be public to
        appear.
      </compatibility>
      <description>
        <code>getPageFormat</code> method now requires a <code>PrinterJob</code>
        argument.
      </description>
      <class package="org.openide.text" name="PrintSettings" link="no"/>
    </change>
<change id="Annotations-API">
      <api name="text"/>
      <summary>New annotations API published</summary>
      <version major="1" minor="20"/>
      <date day="9" month="7" year="2001"/>
      <compatibility addition="yes" deprecation="yes" binary="compatible" source="compatible" semantic="compatible" deletion="no" modification="no">
        Because of publication of Annotation API, all previously used
        <code>NbDocument</code> methods like <code>markError</code>,
        <code>markCurrent</code>, <code>markNormal</code> are deprecated. Use
        <code>addAnnotation</code> and <code>removeAnnotation</code> instead.
      </compatibility>
      <description>
        Annotation API was published.
      </description>
      <class package="org.openide.text" name="Annotation"/>
      <class package="org.openide.text" name="Annotatable"/>
      <class package="org.openide.text" name="NbDocument"/>
    </change>
<change>
      <api name="text"/>
      <summary>Setting colors for lines deprecated</summary>
      <date day="27" month="3" year="2000"/>
      <compatibility deprecation="yes" binary="compatible" source="compatible" semantic="compatible" addition="no" deletion="no" modification="no">
        First removed, later re-added but deprecated in trunk and
        <code>boston</code>. These classes were long disused (and should only have
        ever been used by the editor module anyway, which did not need them).
      </compatibility>
      <description>
        <code>NbDocument.COLORS</code> and <code>NbDocument.Colors</code>
        deprecated.
      </description>
      <class package="org.openide.text" name="NbDocument"/>
    </change>
<change>
      <api name="text"/>
      <summary>Added to javadoc an <code>IndexOutOfBoundsException</code>
        can be thrown from <code>NbDocument.findLineOffset</code> method
      </summary>
      <date day="31" month="10" year="2001"/>
      <compatibility modification="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" addition="no" deletion="no"/>
      <description>
        Added declaration to javadoc of the method
        <code>NbDocument.findLineOffset()</code> can throw an unchecked
        <code>IndexOutOfBoundsException</code>. The method could throw 
        the exception also before (and also other kinds of them see the issue),
        but it was not declared in javadoc. This change makes it compliant
        to use with standard Swing text package and also with
        <code>Line.Set.getCurrent()</code> method.
      </description>
      <class package="org.openide.text" name="NbDocument"/>
      <issue number="17144"/>
    </change>
<change>
      <api name="text"/>
      <summary>Notifications about annotation attaching/detaching added</summary>
      <version major="1" minor="38"/>
      <date day="12" month="10" year="2001"/>
      <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
      <description>
        Added protected methods
        <code>Annotation.notifyAttached()</code> and
        <code>Annotation.notifyDetached()</code>.
      </description>
      <class package="org.openide.text" name="Annotation"/>
    </change>
</changes>
<htmlcontents>
<head>
<title>Change History for the Text API</title>
<link rel="stylesheet" href="prose.css" type="text/css"/>
</head>
<body>
<p class="overviewlink">
<a href="overview-summary.html">Overview</a>
</p>
<h1>Introduction</h1>
<h2>What do the Dates Mean?</h2>
<p>The supplied dates indicate when the API change was made, on the CVS
trunk. From this you can generally tell whether the change should be
present in a given build or not; for trunk builds, simply whether it
was made before or after the change; for builds on a stabilization
branch, whether the branch was made before or after the given date. In
some cases corresponding API changes have been made both in the trunk
and in an in-progress stabilization branch, if they were needed for a
bug fix; this ought to be marked in this list.</p>
<ul>
<li>The <code>release41</code> branch was made on Apr 03 '05 for use in the NetBeans 4.1 release.
Specification versions: 6.0 begins after this point.</li>
<li>The <code>release40</code> branch was made on Nov 01 '04 for use in the NetBeans 4.0 release.
Specification versions: 5.0 begins after this point.</li>
</ul>
<hr/>
<standard-changelists module-code-name="org.openide.text"/>
<hr/>
<p>@FOOTER@</p>
</body>
</htmlcontents>
</apichanges>
