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

<!--
    Created on : June 9, 2007, 5:37 PM
    Author     : vstejskal
    Description:
        The vocabulary for an editor code templates settings file.

    PUBLIC ID  : -//NetBeans//DTD Editor Code Templates settings 1.0//EN
    SYSTEM ID  : https://netbeans.org/dtds/EditorCodeTemplates-1_0.dtd
-->



<!ELEMENT codetemplates ( codetemplate )* >
<!ATTLIST codetemplates>

<!--
    abbreviation:  (String, required) Shortcut text that you type in
                   the editor to expand your code template.
    descriptionId: (String) A resource bundle key with description text for
                   this code template. Modules are encouraged to use this
                   instead of <description/> element to make their templates
                   localizable.
    contexts:      (String) The list of comma separated contexts for filtering
                   templates offered in code completion. Presently this is only
                   used by java module, which registers its own CodeTemplateFilter.Factory.
    uuid:          (String) An id that uniquely identifies this template. If you
                   provide one for your template make sure it is a real unique id.
    remove:        When 'true' this code template will be removed and all its
                   optional attributes and elements will be ignored.
-->
<!ELEMENT codetemplate ( code?, description? ) >
<!ATTLIST codetemplate
          abbreviation      CDATA #REQUIRED
          descriptionId     CDATA #IMPLIED
          contexts          CDATA #IMPLIED
          uuid              CDATA #IMPLIED
          remove            ( true | false ) "false"
          xml:space         ( default | preserve ) "default"
>

<!--
    Contains the actual code of the code template. In API this is also called
    parametrized text. It should be raw text enclosed in <![CDATA[ ]]> section.
    No character translation is done when loading the code text (eg. pipe '|'
    characters are left alone). See editor/codetemplates module's documentation
    for the list of supported parameters (eg. ${cursor} for positioning the caret).
-->
<!ELEMENT code ( #PCDATA ) >
<!ATTLIST code>

<!--
    Contains description for a code template in form of raw text enclosed in
    <![CDATA[ ]]> section. This is designed for users custom code templates or
    when they change description provided by a module. The modules should use
    'descriptionId' attribute instead.
-->
<!ELEMENT description ( #PCDATA ) >
<!ATTLIST description>

