blob: b209a7acec5ef23a8b9b38022bb1c0fb3924b934 [file] [log] [blame]
<!--
!
! Some notes to the DTD:
!
! The location element is set as optional since it was introduced first in Qt 4.2.
! The userdata element is set as optional since it was introduced first in Qt 4.4.
!
-->
<!--
! Macro used in order to escape byte entities not allowed in an xml document
! for instance, only #x9, #xA and #xD are allowed characters below #x20.
-->
<!ENTITY % evilstring '(#PCDATA | byte)*' >
<!ELEMENT byte EMPTY>
<!-- value contains decimal (e.g. 1000) or hex (e.g. x3e8) unicode encoding of one char -->
<!ATTLIST byte
value CDATA #REQUIRED>
<!--
! This element wildcard is no valid DTD. No better solution available.
! extra elements may appear in TS and message elements. Each element may appear
! only once within each scope. The contents are preserved verbatim; any
! attributes are dropped. Currently recognized extra tags include:
! extra-po-msgid_plural, extra-po-old_msgid_plural
! extra-po-flags (comma-space separated list)
! extra-loc-layout_id
! extra-loc-feature
! extra-loc-blank
-->
<!ELEMENT extra-* %evilstring; >
<!ELEMENT TS (defaultcodec?, extra-**, (context|message)+) >
<!ATTLIST TS
version CDATA #IMPLIED
sourcelanguage CDATA #IMPLIED
language CDATA #IMPLIED>
<!-- The encoding to use in the QM file by default. Default is ISO-8859-1. -->
<!ELEMENT defaultcodec (#PCDATA) >
<!ELEMENT context (name, comment?, (context|message)+) >
<!ATTLIST context
encoding CDATA #IMPLIED>
<!ELEMENT name %evilstring; >
<!-- This is "disambiguation" in the (new) API, or "msgctxt" in gettext speak -->
<!ELEMENT comment %evilstring; >
<!-- Previous content of comment (result of merge) -->
<!ELEMENT oldcomment %evilstring; >
<!-- The real comment (added by developer/designer) -->
<!ELEMENT extracomment %evilstring; >
<!-- Comment added by translator -->
<!ELEMENT translatorcomment %evilstring; >
<!ELEMENT message (location*, source?, oldsource?, comment?, oldcomment?, extracomment?, translatorcomment?, translation?, userdata?, extra-**) >
<!--
! If utf8 is "true", the defaultcodec is overridden and the message is encoded
! in UTF-8 in the QM file. If it is "both", both source encodings are stored
! in the QM file.
-->
<!ATTLIST message
id CDATA #IMPLIED
utf8 (true|false|both) "false"
numerus (yes|no) "no">
<!ELEMENT location EMPTY>
<!--
! If the line is omitted, the location specifies only a file.
!
! location supports relative specifications as well. Line numbers are
! relative (explicitly positive or negative) to the last reference to a
! given filename; each file starts with current line 0. If the filename
! is omitted, the "current" one is used. For the 1st location in a message,
! "current" is the filename used for the 1st location of the previous message.
! For subsequent locations, it is the filename used for the previous location.
! A single TS file has either all absolute or all relative locations.
-->
<!ATTLIST location
filename CDATA #IMPLIED
line CDATA #IMPLIED>
<!ELEMENT source %evilstring;>
<!-- Previous content of source (result of merge) -->
<!ELEMENT oldsource %evilstring;>
<!--
! The following should really say one evilstring macro or several
! numerusform or lengthvariant elements, but the DTD can't express this.
-->
<!ELEMENT translation (#PCDATA|byte|numerusform|lengthvariant)* >
<!--
! If no type is set, the message is "finished".
! Length variants must be ordered by falling display length.
! variants may not be yes if the message has numerus yes.
-->
<!ATTLIST translation
type (unfinished|obsolete) #IMPLIED
variants (yes|no) "no">
<!-- Deprecated. Use extra-* -->
<!ELEMENT userdata (#PCDATA)* >
<!--
! The following should really say one evilstring macro or several
! lengthvariant elements, but the DTD can't express this.
! Length variants must be ordered by falling display length.
-->
<!ELEMENT numerusform (#PCDATA|byte|lengthvariant)* >
<!ATTLIST numerusform
variants (yes|no) "no">
<!ELEMENT lengthvariant %evilstring; >