<?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.

-->
<?xml-stylesheet type="text/xml" href="../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../nbbuild/javadoctools/apichanges.dtd">

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

    <!-- First, a list of API names you may use: -->
    <apidefs>
        <apidef name="general">General</apidef>
        <!-- etc. -->
    </apidefs>

    <!-- ACTUAL CHANGES BEGIN HERE: -->

    <changes>
        <change id="indent.support">
            <summary>Indentation Support module created</summary>
            <version major="1" minor="39"/>
            <date day="2" month="9" year="2014"/>
            <author login="dbalek"/>
            <compatibility source="incompatible" binary="compatible" deletion="yes"/>
            <description>
                Implementation of indentation which depends on typing hooks moved to a separate module, 
                see <a href="@org-netbeans-modules-editor-indent-support@/index.html">its javadoc</a> for more info.
            </description>
            <class package="org.netbeans.modules.editor.indent.spi.support" name="AutomatedIndenting" link="no"/>
        </change>
        <change id="IndentUtils.createIndentString.added">
            <summary>Adding org.netbeans.modules.editor.indent.api.IndentUtils.createIndentString</summary>
            <version major="1" minor="22"/>
            <date day="3" month="12" year="2010"/>
            <author login="mmetelka"/>
            <compatibility source="compatible" binary="compatible" deletion="no" addition="yes" modification="no"/>
            <description>
                Method IndentUtils.createIndentString(int indent, boolean expandTabs, int tabSize) added.
            </description>
            <class package="org.netbeans.modules.editor.indent.api" name="IndentUtils"/>
            <issue number="192289"/>
        </change>

        <change id="AutomatedIndentation.added">
            <summary>Adding org.netbeans.modules.editor.indent.spi.support.AutomatedIndenting</summary>
            <version major="1" minor="20"/>
            <date day="23" month="10" year="2008"/>
            <author login="vstejskal"/>
            <compatibility source="compatible" binary="compatible" deletion="no" addition="yes" modification="no"/>
            <description>
                The <code>AutomatedIndenting</code> support class provides regex-based
                automatic re-indentation of lines as user types. This is a replacement for
                the deprecated <code>ExtFormatter.getReformatBlock</code> and <code>INDENT_HOT_CHARS_ACCEPTOR</code>
                setting.
            </description>
            <class package="org.netbeans.modules.editor.indent.spi.support" name="AutomatedIndenting" link="no"/>
            <issue number="120357"/>
        </change>

        <change id="Indent.indentNewLine.added">
            <summary>Adding org.netbeans.modules.editor.indent.api.Indent.indentNewLine</summary>
            <version major="1" minor="19"/>
            <date day="15" month="10" year="2008"/>
            <author login="vstejskal"/>
            <compatibility source="compatible" binary="compatible" deletion="no" addition="yes" modification="no"/>
            <description>
                The new method <code>int Indent.indentNewLine(int)</code> was added as
                a replacement for the old <code>int Formatter.indentNewLine(BaseDocument, int)</code>.
            </description>
            <class package="org.netbeans.modules.editor.indent.api" name="Indent"/>
            <issue number="120357"/>
        </change>

        <change id="CodeStylePreferences.Provider">
            <summary>Adding CodeStylePreferences.Provider</summary>
            <version major="1" minor="18"/>
            <date day="17" month="2" year="2010"/>
            <author login="vstejskal"/>
            <compatibility addition="yes"/>
            <description>
                Adding <code>CodeStylePreferences.Provider</code> interface in order to allow
                isolating the project-dependent code style preferences storage from the rest
                of the editor infrastructure.
            </description>
            <class package="org.netbeans.modules.editor.indent.spi" name="CodeStylePreferences"/>
            <issue number="178311"/>
        </change>

        <change id="context.lookup">
            <summary>Enhance Context class with Lookup so that indenters
                can communicate with each other.</summary>
            <version major="1" minor="12"/>
            <date day="3" month="3" year="2009"/>
            <author login="dkonecny"/>
            <compatibility addition="yes"/>
            <description>
                Let IndentTask and/or ReformatTask implement Lookup.Provider
                and before executing indentation/reformat call these providers
                and provide merged result via getLookup() method in Context.
                Individual formatters check lookup for presence of other formatters
                and communicate with them via domain specific APIs.
            </description>
            <class package="org.netbeans.modules.editor.indent.spi" name="Context"/>
            <issue number="159479"/>
        </change>

        <change id="CodeStylePreferences.for.embedded.mimeTypes">
            <summary>Adding CodeStylePreferences.get(Document doc, String mimeType)
            and CodeStylePreferences.get(FileObject file, String mimeType).</summary>
            <version major="1" minor="11"/>
            <date day="5" month="2" year="2008"/>
            <author login="dbalek"/>
            <compatibility source="compatible" binary="compatible" deletion="no" addition="yes" modification="no"/>
            <description>
                The new methods were added to allow for getting the formatting/indentation
                preferences of embedded mimeTypes.
            </description>
            <issue number="153957"/>
        </change>

        <change id="CodeStylePreferences">
            <summary>Adding org.netbeans.modules.editor.indent.spi.CodeStylePreferences</summary>
            <version major="1" minor="9"/>
            <date day="13" month="8" year="2008"/>
            <author login="vstejskal"/>
            <compatibility source="compatible" binary="compatible" deletion="no" addition="yes" modification="no"/>
            <description>
                The new <code>CodeStylePreferences</code> class was added in order to
                unify access to editor formatting/indentation preferences (ie. code style).
            </description>
            <class package="org.netbeans.modules.editor.indent.spi" name="CodeStylePreferences"/>
            <issue number="141974"/>
        </change>

        <change id="repackaging.to.unofficial.packages">
            <summary>API/SPI repackaged to remove it from the official NetBeans API packages</summary>
            <version major="1" minor="5"/>
            <date day="29" month="10" year="2007"/>
            <author login="vstejskal"/>
            <compatibility source="incompatible" binary="incompatible" deletion="yes" addition="yes" modification="no"/>
            <description>
                <p>
                    The API/SPI classes were moved from the official <code>org.netbeans.api</code>
                    and <code>org.netbeans.spi</code> packages and the stability level
                    of the API was set to <code>devel</code> to indicate that the module
                    and its API is still under development. The major version of the
                    module was set to <code>2</code> to mark the incompatible change.
                </p>
                <p>
                    There was not enough time in the Netbeans 6.0 release timeframe for us
                    to fully stabilize the APIs offered by this module. Therefore we
                    decided to release the <b>development</b> version of the APIs and
                    do a full API review in the next release cycle.
                </p>
            </description>
            <issue number="116022"/>
        </change>

        <change id="Context.indentRegions">
            <summary>Added several methods to Context class</summary>
            <version major="1" minor="2"/>
            <date day="13" month="10" year="2007"/>
            <author login="mmetelka"/>
            <compatibility source="incompatible" deletion="no" addition="yes" modification="yes"/>
            <description>
                <p>
                Added <code>Context.lineIndent()</code>, <code>Context.lineStartOffset()</code>,
                <code>Context.caretOffset()</code>, <code>Context.setCaretOffset()</code>
                and <code>Context.indentRegions()</code> methods (including Context.Region class).
                Fixed <code>Context.modifyIndent()</code> signature and implementation.
                </p>
            </description>
            <issue number="116022"/>
        </change>

        <change id="Context.mimePath.added">
            <summary>Added Context.mimePath()</summary>
            <version major="1" minor="1"/>
            <date day="17" month="7" year="2007"/>
            <author login="mmetelka"/>
            <compatibility source="compatible" deletion="no" addition="yes" modification="no"/>
            <description>
                <p>
                Added <code>Context.mimePath()</code> method.
                </p>
            </description>
            <issue number="110129"/>
        </change>

        <change id="created">
            <summary>editor/indent module was created.</summary>
            <version major="1" minor="0"/>
            <date day="14" month="6" year="2007"/>
            <author login="mmetelka"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible"/>
            <description>
                The module was created.
            </description>
        </change>

    </changes>

    <!-- Now the surrounding HTML text and document structure: -->

    <htmlcontents>
<!-- Generated from apichanges.xml -->
    <head>
      <title>Change History of Editor Indentation 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>

<p>This document lists changes made to the <a href="overview-summary.html">Editor Indent API</a>.</p>

<!-- The actual lists of changes, as summaries and details: -->
      <hr/>
      <standard-changelists module-code-name="org.netbeans.modules.editor.indent/1"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
