<!--
The contents of this file are subject to the terms of the Common Development
and Distribution License (the License). You may not use this file except in
compliance with the License.

You can obtain a copy of the License at https://netbeans.org/cddl.html
or https://netbeans.org/cddl.txt.

When distributing Covered Code, include this CDDL Header Notice in each file
and include the License file at https://netbeans.org/cddl.txt.
If applicable, add the following below the CDDL Header, with the fields
enclosed by brackets [] replaced by your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"

The Original Software is NetBeans. The Initial Developer of the Original
Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
Microsystems, Inc. All Rights Reserved.
-->

<!--
-//NetBeans//DTD annotation type 1.1//EN
https://netbeans.org/dtds/annotation-type-1_1.dtd
Document type declaration for AnnotationType.
-->

<!ELEMENT type (combination?)>
<!ATTLIST type name CDATA #REQUIRED>

<!ATTLIST type visible (true | false) #IMPLIED>
<!-- The annotation is visible=true by default -->

<!ATTLIST type localizing_bundle CDATA #IMPLIED>
<!ATTLIST type description_key CDATA #IMPLIED>
<!-- No localization/no description by defualt.
   In fact, bundle/description is #REQUIRED for visible=true -->

<!ATTLIST type glyph CDATA #IMPLIED>
<!ATTLIST type highlight CDATA #IMPLIED>
<!ATTLIST type foreground CDATA #IMPLIED>
<!ATTLIST type waveunderline CDATA #IMPLIED>

<!ATTLIST type type (line|linepart) #IMPLIED>
<!-- The type=line by default -->

<!ATTLIST type actions CDATA #IMPLIED>

<!--Should a custom color be used when showing in the editor side bar (Error Stripe)?
    default: true if custom_sidebar_color attribute is specified, false otherwise
-->
<!ATTLIST type use_custom_sidebar_color (true | false) #IMPLIED>

<!--The custom color for the editor side bar (Error Stripe).
    Valid values are 0xRRGGBB, where RR, GG, BB are hexadecimal numbers.
    default: no color
-->
<!ATTLIST type custom_sidebar_color CDATA #IMPLIED>

<!--Severity of the annotation. Used to recognize errors and warnings. If
    none, the annotation is not visible in certain views (editor side bar).
    default: none
-->
<!ATTLIST type severity (error | warning | ok | none) #IMPLIED>

<!--Whether the annotation should be browseable by some kind "Show Next Error" action.
    default: false
-->
<!ATTLIST type browseable (true | false) #IMPLIED>

<!--Determines some "priority" of the annotation.
    The smaller number, the higher priority.
    default: 0
-->
<!ATTLIST type priority CDATA #IMPLIED>

<!ELEMENT combination (combine+)>
<!ATTLIST combination tiptext_key CDATA #IMPLIED>
<!ATTLIST combination order CDATA #IMPLIED>
<!ATTLIST combination min_optionals CDATA #IMPLIED>

<!ELEMENT combine EMPTY>
<!ATTLIST combine annotationtype CDATA #REQUIRED>

<!ATTLIST combine absorb_all (true | false) #IMPLIED>
<!-- The absorb_all=false by default -->

<!ATTLIST combine optional (true | false) #IMPLIED>
<!-- The optional=false by default -->

<!ATTLIST combine min CDATA #IMPLIED>

