<!--
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 VCS Configuration 1.1//EN
https://netbeans.org/dtds/vcs-configuration-1_1.dtd
XML representation of a VCS commands and variables configuration profile
-->

<!ELEMENT configuration    (label, resourceBundle?, os?, (condition)*, variables, commands, globalCommands?)   >
<!ELEMENT resourceBundle   (#PCDATA)   >
<!ELEMENT label            (#PCDATA)   >
<!ELEMENT os               (compatible?, uncompatible?)   >
<!ELEMENT compatible       (#PCDATA)   >
<!ELEMENT uncompatible     (#PCDATA)   >
<!ELEMENT condition        (var|and|or|not)*   >
<!ELEMENT var              EMPTY   >
<!ELEMENT and              (var|and|or|not)*   >
<!ELEMENT or               (var|and|or|not)*   >
<!ELEMENT not              (var)   >
<!ELEMENT variables        (variable)*   >
<!ELEMENT commands         (command|separator)*   >
<!ELEMENT globalCommands   (command)*   >
<!ELEMENT variable         (value)*   >
<!ELEMENT command          (command|separator|property)*   >
<!ELEMENT separator        EMPTY   >
<!ELEMENT property         (value)*   >
<!ELEMENT value            (#PCDATA)   >

<!ATTLIST configuration
          type             CDATA #IMPLIED   >
          
<!ATTLIST condition
          var              CDATA #REQUIRED   >

<!ATTLIST var
          name             CDATA #REQUIRED
          value            CDATA #IMPLIED
          valueIgnoreCase  CDATA #IMPLIED
          valueContains    CDATA #IMPLIED
          valueContainsIgnoreCase  CDATA #IMPLIED   >

<!ATTLIST variable
          name             CDATA #REQUIRED
          basic            CDATA #IMPLIED
          label            CDATA #IMPLIED
          labelMnemonic    CDATA #IMPLIED
          localFile        CDATA #IMPLIED
          localDir         CDATA #IMPLIED
          executable       CDATA #IMPLIED
          order            CDATA #IMPLIED
          selector         CDATA #IMPLIED
          if               CDATA #IMPLIED
          unless           CDATA #IMPLIED   >

<!ATTLIST command
          name             CDATA #REQUIRED
          displayName      CDATA #IMPLIED                                                                                    
          if               CDATA #IMPLIED
          unless           CDATA #IMPLIED     >

<!ATTLIST property
          name             CDATA #REQUIRED
          if               CDATA #IMPLIED
          unless           CDATA #IMPLIED    >

<!ATTLIST value
          xml:space        CDATA #IMPLIED
          if               CDATA #IMPLIED
          unless           CDATA #IMPLIED    >

