###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

# BRLTTY Contraction Table - German (uncontracted)
# Created by Mario Lang <mlang@delysid.org>.

numsign 3456  number sign, just one operand
letsign 6
capsign 46 # FIXME: only allowed at begword, midendword capsign is 45 
begcaps 45

# the decimal digits
always 1 1
always 2 12
always 3 14
always 4 145
always 5 15
always 6 124
always 7 1245
always 8 125
always 9 24
always 0 245

include letters-latin.cti
always ä 345
always Ä 345
always ö 246
always Ö 246
always ß 6-2346
always ü 1256
always Ü 1256

# accented letters
always À 4-1      [C0] upper a grave
always Á 4-1      [C1] upper a acute
always Â 4-1      [C2] upper a circumflex
always Ã 4-1      [C3] upper a tilde
always Ç 4-14     [C7] upper c cedilla
always È 4-15     [C8] upper e grave
always É 4-15     [C9] upper e acute
always Ê 4-15     [CA] upper e circumflex
always Ë 4-15     [CB] upper e dieresis
always Ì 4-24     [CC] upper i grave
always Í 4-24     [CD] upper i acute
always Î 4-24     [CE] upper i circumflex
always Ï 4-24     [CF] upper i dieresis
always Ð 4-15     [D0] upper eth
always Ñ 4-1345   [D1] upper n tilde
always Ò 4-135    [D2] upper o grave
always Ó 4-135    [D3] upper o acute
always Ô 4-135    [D4] upper o circumflex
always Õ 4-135    [D5] upper o tilde
always Ø 4-135    [D8] upper o slash
always Ù 4-136    [D9] upper u grave
always Ú 4-136    [DA] upper u acute
always Û 4-136    [DB] upper u circumflex
always Ý 4-13456  [DD] upper y acute
always Þ 4-2345   [DE] upper t horn
always à   4-1      [E0] lower a grave
always á   4-1      [E1] lower a acute
always â   4-1      [E2] lower a circumflex
always ã   4-1      [E3] lower a tilde
always å   4-1      [E5] lower a ring
always æ   1-15     [E6] lower ae
always ç   4-14     [E7] lower c cedilla
always è   4-15     [E8] lower e grave
always é   4-15     [E9] lower e acute
always ê   4-15     [EA] lower e circumflex
always ë   4-15     [EB] lower e dieresis
always ì   4-24     [EC] lower i grave
always í   4-24     [ED] lower i acute
always î   4-24     [EE] lower i circumflex
always ï   4-24     [EF] lower i dieresis
always ð   4-15     [F0] lower eth
always ñ   4-1345   [F1] lower n tilde
always ò   4-135    [F2] lower o grave
always ó   4-135    [F3] lower o acute
always ô   4-135    [F4] lower o circumflex
always õ   4-135    [F5] lower o tilde
always ø   4-135    [F8] lower o slash
always ù   4-136    [F9] lower u grave
always ú   4-136    [FA] lower u acute
always û   4-136    [FB] lower u circumflex
always ý   4-13456  [FD] lower y acute
always þ   4-2345   [FE] lower t horn
always ÿ   4-13456  [FF] lower y dieresis

# common abbreviations
word GmbH 46-1245-134-12-45-125

midnum ^ 4-346-3456
always \u2070 4-346-3456-245  superscript 0
always \u00B9 4-346-3456-1    superscript 1
always \u00B2 4-346-3456-12        superscript 2
always \u00B3 4-346-3456-14   superscript 3
always \u2074 4-346-3456-145  superscript 4
always \u2075 4-346-3456-15   superscript 5
always \u2076 4-346-3456-124  superscript 6
always \u2077 4-346-3456-1245 superscript 7
always \u2078 4-346-3456-125  superscript 8
always \u2079 4-346-3456-24   superscript 9

always ° 4-356 Grad
before space endnum ' 4-35 Winkelminute
before space endnum \u2032 4-35 Winkelminute
before space endnum '' 4-35-35
before space endnum \u2033 4-35-35

prepunc " 236
postpunc " 356
begword « 236
endword » 356
always " 6-4

always ' 6-6

prepunc `` 236
always ` 4

always ^ 456-126

always ~ 4-156
repeatable ~~~ 4-156-4-156-4-156

midnum , 2
always , 2

always ; 23

midnum : 25
always : 25
repeatable ::: 25-25-25

midnum . 3
always . 3
always ... 3-3-3
always .\s.\s. 3-3-3 . . .

endnum ! 12346 (factorial)
always ! 235

endword ? 26
always ? 6-26
always \uFFFD 6-26

always ( 2356
always ) 2356

always [ 6-2356
always ] 6-2356

always { 56-2356
always } 56-2356

always # 3456

midnum * 35
always * 6-35
repeatable *** 6-35-35-35

midnum / 256
always / 5-2

always % 3456-245-356
always \u2030 3456-245-356-356 promille
always & 5-136

always @ 4-345

always \\ 347

always | 6-34

repeatable \s 0
repeatable \t 0
repeatable \xa0 0 no break space

repeatable --- 36-36-36

always _ 4567
repeatable ___ 4567-4567

repeatable === 6-2356-2356-2356

# the hyphen
midendword - 36
always - 6-36
#repeatable ­­­ 6-36-36-36

# mathematical symbols
always < 5-13
always = 4-2356
always > 46-2
midnum + 235
always + 6-235
midnum - 36
always × 4-236 Mal(-Kreuz)
midnum × 236 Mal(-Kreuz)
midnum ÷ 46-34 division sign
begnum $ 256
always $ 256-3456
always ¼ 3456-1-1256-145
always ½ 3456-1-1256-12
always ¾ 3456-1-1256-14

# other special characters
always © 2356-6-14-2356 copyright
always ¶ 4-1234-345 paragraph
always § 4-234-3 section
always ¢ 4-14 cents
always £ 4-123 pounds
always ¥ 4-13456 yen
always µ 46-134 mu

# special character sequences
literal :// URLs
literal www.

literal .com
literal .edu
literal .gov
literal .mil
literal .net
literal .org
include countries.cti

literal .doc
literal .htm
literal .html
literal .tex
literal .txt

literal .gif
literal .jpg
literal .png
literal .wav

literal .tar
literal .zip

# When an upper-case letter occurs inside a contraction, following a lower-case
# letter, the contraction should not be used. Example McCan

# when a decimal begins with a period, it should be translated with a 
# number sign followed by a decimal point, followed by the number.
