<!-- FIXME: the "name" attribute can be "_name" to be marked for translation -->
<!ENTITY % itemattrs
 "name  CDATA #REQUIRED
  style CDATA #REQUIRED">

<!ELEMENT language (escape-char?,(line-comment|block-comment|string|syntax-item|pattern-item|keyword-list)+)>
<!-- FIXME: the "name" and "section" attributes can be prefixed with
     "_" to be marked for translation -->
<!ATTLIST language
  name                CDATA #REQUIRED
  version             CDATA #REQUIRED
  section             CDATA #REQUIRED
  translation-domain  CDATA #IMPLIED
  mimetypes           CDATA #REQUIRED>

<!ELEMENT escape-char (#PCDATA)>

<!ELEMENT line-comment (start-regex)>
<!ATTLIST line-comment
  %itemattrs;>

<!ELEMENT block-comment (start-regex,end-regex)>
<!ATTLIST block-comment
  %itemattrs;>

<!ELEMENT string (start-regex,end-regex)>
<!ATTLIST string
  %itemattrs;
  end-at-line-end (true|false) "true">

<!ELEMENT syntax-item (start-regex,end-regex)>
<!ATTLIST syntax-item
  %itemattrs;>

<!ELEMENT pattern-item (regex)>
<!ATTLIST pattern-item
  %itemattrs;>

<!ELEMENT keyword-list (keyword+)>
<!ATTLIST keyword-list
  %itemattrs;
  case-sensitive                  (true|false) "true"
  match-empty-string-at-beginning (true|false) "false"
  match-empty-string-at-end       (true|false) "false"
  beginning-regex                 CDATA        #IMPLIED
  end-regex                       CDATA        #IMPLIED>

<!ELEMENT start-regex (#PCDATA)>
<!ELEMENT end-regex (#PCDATA)>
<!ELEMENT regex (#PCDATA)>
<!ELEMENT keyword (#PCDATA)>
