<?xml version="1.0" encoding="US-ASCII"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- $Id$ -->

<!ELEMENT hyphenation-info (hyphen-char?, hyphen-min?,
                           classes, exceptions?, patterns)>

<!-- Hyphen character to be used in the exception list as shortcut for
     <hyphen pre-break="-"/>. Defaults to '-'
-->
<!ELEMENT hyphen-char EMPTY>
<!ATTLIST hyphen-char value CDATA #REQUIRED>

<!-- Default minimum length in characters of hyphenated word fragments
     before and after the line break. For some languages this is not
     only for aesthetic purposes, wrong hyphens may be generated if this
     is not accounted for.
-->
<!ELEMENT hyphen-min EMPTY>
<!ATTLIST hyphen-min before CDATA #REQUIRED>
<!ATTLIST hyphen-min after CDATA #REQUIRED>

<!-- Character equivalent classes: space separated list of character groups, all
     characters in a group are to be treated equivalent as far as
     the hyphenation algorithm is concerned. The first character in a group
     is the group's equivalent character. Patterns should only contain
     first characters. It also defines word characters, i.e. a word that
     contains characters not present in any of the classes is not hyphenated.
-->
<!ELEMENT classes (#PCDATA)>

<!-- Hyphenation exceptions: space separated list of hyphenated words.
     A hyphen is indicated by the hyphen tag, but you can use the
     hyphen-char defined previously as shortcut. This is in cases
     when the algorithm procedure finds wrong hyphens or you want
     to provide your own hyphenation for some words.
-->
<!ELEMENT exceptions (#PCDATA|hyphen)* >

<!-- The hyphenation patterns, space separated. A pattern is made of 'equivalent'
     characters as described before, between any two word characters a digit
     in the range 0 to 9 may be specified. The absence of a digit is equivalent
     to zero. The '.' character is reserved to indicate beginning or ending
     of words. -->
<!ELEMENT patterns (#PCDATA)>

<!-- A "full hyphen" equivalent to TeX's \discretionary
     with pre-break, post-break and no-break attributes.
     To be used in the exceptions list, the hyphen character is not
     automatically added -->
<!ELEMENT hyphen EMPTY>
<!ATTLIST hyphen pre CDATA #IMPLIED>
<!ATTLIST hyphen no CDATA #IMPLIED>
<!ATTLIST hyphen post CDATA #IMPLIED>
