<?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="BracesMatchingSPI">Braces Matching SPI</apidef>
        <!-- etc. -->
    </apidefs>

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

    <changes>
        
        <change id="brace.context">
            <summary>Semantic context can be provided for a brace</summary>
            <version major="1" minor="30"/>
            <date day="6" month="5" year="2013"/>
            <author login="sdedic"/>
            <compatibility addition="yes" binary="compatible" source="compatible" semantic="compatible"/>
            <description>
                The brace tooltip may need to display additional text, if for example if-condition spans multiple lines,
                or for an else-branch, where the important information (if-condition text) is located elsewhere. BraceMatcher
                can implement the optional mixin BraceMatcher.ContextLocator and provide boundaries for this additional text.
            </description>
            <class package="org.netbeans.spi.editor.bracesmatching" name="BracesMatcher"/>
            <class package="org.netbeans.spi.editor.bracesmatching" name="BraceContext"/>
            <issue number="217730"/>
        </change>

        <change id="document.locking.changed">
            <summary>Document locking changed</summary>
            <version major="1" minor="6"/>
            <date day="27" month="8" year="2008"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="incompatible" modification="yes" addition="no"/>
            <description>
                <p>
                The infrastructure does not lock the document prior calling the
                <code>BracesMatcher</code> methods. This change was done in order to
                support <code>BracesMatcher</code> implementations that need parser
                results and have to lock the parser first.
                </p>
                <p>
                From now on it's up to <code>BracesMatcher</code> implementations
                to readlock the document when directly searching through it
                for the origin or matching areas.
                </p>
            </description>
            <issue number="131284"/>
        </change>

        <change id="MatcherContext.isTastCanceled-added">
            <summary>Added MatcherContext.isTastCanceled()</summary>
            <version major="1" minor="3"/>
            <date day="3" month="11" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="incompatible" modification="yes" addition="yes"/>
            <description>
                <p>
                    The concept of using <code>Thread.currentThread().interrupt()</code>
                    for canceling braces matching tasks is flawed. The call breaks
                    synchronization of other parts ofthe system that are used from the
                    braces matching tasks, which results in <code>InterruptedException</code>s
                    throw from various random places and possibly in corruption of
                    internal data.
                </p>
                <p>
                    We introduced <code>MatcherContext.isTaskCanceled()</code> method
                    for determinig if a braces matching task was caceled.
                </p>
            </description>
            <issue number="114651"/>
        </change>

        <change id="marking.under.development">
            <summary>Marking the SPI as under development</summary>
            <version major="1" minor="2"/>
            <date day="1" month="11" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="incompatible" source="incompatible" semantic="incompatible" modification="yes"/>
            <description>
                <p>
                    The API has gone through a fast track review, but we would like
                    to give it one relase as a stabilization period. Therefore its
                    major version was set to <code>0</code>.
                </p>
            </description>
        </change>

        <change id="BracesMatcher.findOrigin.additional.highlights">
            <summary>Additional highlights from BracesMatcher.findOrigin</summary>
            <version major="1" minor="1"/>
            <date day="18" month="6" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" modification="yes"/>
            <description>
                <p>
                    The <code>BracesMatcher.findOrigin</code> can return additional
                    offset pairs for areas that it wants to be highlighted. The first
                    offset pair should always mark the whole original area. If no other
                    pairs are supplied the whole original area will be highlighted.
                </p>
            </description>
        </change>

        <change id="created">
            <summary>Braces Matching SPI created</summary>
            <version major="1" minor="0"/>
            <date day="17" month="5" year="2007"/>
            <author login="vstejskal"/>
            <compatibility binary="compatible" source="compatible" semantic="compatible" />
            <description>
                <p>
                    The Braces Matching SPI was created.
                </p>
            </description>
        </change>

    </changes>

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

    <htmlcontents>
<!-- Generated from apichanges.xml -->
    <head>
      <title>Change History for the Braces Matching SPI</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">Braces Matching SPI</a>.</p>

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

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

    </body>
  </htmlcontents>

</apichanges>
