<!--
  This file is part of avahi.

  avahi is free software; you can redistribute it and/or modify it under
  the terms of the GNU General Public License as published by the Free
  Software Foundation; either version 2 of the License, or (at your
  option) any later version.

  avahi is distributed in the hope that it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  for more details.

  You should have received a copy of the GNU General Public License
  along with avahi; if not, write to the Free Software Foundation,
  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
-->

<!ELEMENT manpage (synopsis | description | section | options | seealso)*>
<!ATTLIST manpage name CDATA #REQUIRED section CDATA #REQUIRED desc CDATA #IMPLIED>
<!ELEMENT arg (#PCDATA)>
<!ELEMENT p (#PCDATA | arg | url | manref | opt | file )*>
<!ELEMENT synopsis (cmd | p)+>
<!ELEMENT description (p)+>
<!ELEMENT section (p | option)*>
<!ATTLIST section name CDATA #REQUIRED>
<!ELEMENT option (#PCDATA | p | optdesc)*>
<!ELEMENT optdesc (#PCDATA | p )*>
<!ELEMENT cmd (#PCDATA | arg | opt)*>
<!ELEMENT options (p | option)*>
<!ELEMENT seealso (p)*>
<!ELEMENT opt (#PCDATA)>
<!ELEMENT file (#PCDATA)>
<!ELEMENT manref EMPTY>
<!ATTLIST manref name CDATA #REQUIRED section CDATA #REQUIRED href CDATA #IMPLIED>
<!ELEMENT url EMPTY>
<!ATTLIST url href CDATA #REQUIRED>
