asterisk/say.conf

Fri, 15 Oct 2010 18:46:25 +0200

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 15 Oct 2010 18:46:25 +0200
changeset 261
4f973c756446
permissions
-rw-r--r--

Update copyright, file server URL, modify doc and link logic.
Now documentation is installed by default to the correct path,
and QtCreator links against Qt shared libraries instead of Qt
static libraries. This unfortunate change supports Nokia's
unfortunate decision to poorly support static linking in Qt.

michael@202 1 ; say.conf
michael@202 2 ;
michael@202 3 ; language configuration
michael@202 4 ;
michael@202 5 ; The new language routines produce strings of the form
michael@202 6 ; prefix:[format:]data
michael@202 7 ; that are matched against the rules in this file to produce
michael@202 8 ; an output.
michael@202 9 ;
michael@202 10 ; The data is generally the string to be spelled (either a number,
michael@202 11 ; an ascii string or a date/time in the format specified below).
michael@202 12 ; It is available, in the right hand side of a rule, as variable ${SAY}.
michael@202 13 ;
michael@202 14 ; The format is optional and normally used only for date/time.
michael@202 15 ; The prefix is used to select the pronunciation - standard
michael@202 16 ; prefixes are
michael@202 17 ; num used for numbers
michael@202 18 ; enum used for enumerations
michael@202 19 ; date for dates
michael@202 20 ; time for times
michael@202 21 ; datetime for dates and times
michael@202 22 ; char for character strings
michael@202 23 ; phonetic for phonetic strings
michael@202 24 ; digit for digit strings
michael@202 25 ;
michael@202 26 ; but others can be used at will.
michael@202 27 ;
michael@202 28 ; Processing occurs as follows:
michael@202 29 ; If the format is empty, or there is no format, the entire
michael@202 30 ; string is matched against one of the pattern on the left hand side.
michael@202 31 ; On the first match, the various comma-separated components on the right
michael@202 32 ; hand side are pronounced, as follows:
michael@202 33 ; + a component starting with a prefix: (i.e. with a ':' in it)
michael@202 34 ; is re-processed according to these rules;
michael@202 35 ; + a component without a ':' in it is considered a filename and
michael@202 36 ; the corresponding file is played.
michael@202 37 ;
michael@202 38 ; If the format is non-empty, the format is split into its components
michael@202 39 ; (individual characters, or filenames in single quotes), and then
michael@202 40 ; filenames are played, whereas single characters are used to
michael@202 41 ; generate a new string format:pat:data to be processed.
michael@202 42 ;
michael@202 43 ; DATES/AND TIMES assume that the date info is available in
michael@202 44 ; the form YYYYMMDDHHmm.ss-dow-doy
michael@202 45 ; with 4 digits for the year, 2 for month, day, hour, minutes, seconds,
michael@202 46 ; one digit for the day-of-week, and 3 digits for the day-of-year.
michael@202 47 ;
michael@202 48 ; Example:
michael@202 49 ; datetime::200604172030.00-4-102
michael@202 50 ; (typical format for a date) is first matched against the line
michael@202 51 ; datetime::. => date:AdBY 'digits/at' IMp:${SAY}
michael@202 52 ; which is normally present with the default format for dates.
michael@202 53 ; In turn, the format string "AdBY 'digits/at' IMp" results in
michael@202 54 ; the sequence
michael@202 55 ; date:A:200604172030.00-4-102
michael@202 56 ; date:d:200604172030.00-4-102
michael@202 57 ; date:B:200604172030.00-4-102
michael@202 58 ; date:Y:200604172030.00-4-102
michael@202 59 ; digits/at
michael@202 60 ; date:I:200604172030.00-4-102
michael@202 61 ; date:M:200604172030.00-4-102
michael@202 62 ; date:p:200604172030.00-4-102
michael@202 63 ;
michael@202 64 ;
michael@202 65 ; Remember, normally X Z N are special, and the search is
michael@202 66 ; case insensitive, so you must use [X] [N] [Z] .. if you
michael@202 67 ; want exact match.
michael@202 68
michael@202 69 ; We start with the basic rules that might be more-or-less
michael@202 70 ; language-independent
michael@202 71
michael@202 72 [digit-base](!) ; base rule for digit strings
michael@202 73 ; XXX incomplete yet
michael@202 74 _digit:[0-9] => digits/${SAY}
michael@202 75 _digit:[-] => letters/dash
michael@202 76 _digit:[*] => letters/star
michael@202 77 _digit:[@] => letters/at
michael@202 78 _digit:[0-9]. => digit:${SAY:0:1}, digit:${SAY:1}
michael@202 79
michael@202 80 [date-base](!) ; base rules for dates and times
michael@202 81 ; the 'SAY' variable contains YYYYMMDDHHmm.ss-dow-doy
michael@202 82 ; these rule map the strftime attributes.
michael@202 83 _date:Y:. => num:${SAY:0:4} ; year, 19xx
michael@202 84 _date:[Bb]:. => digits/mon-$[${SAY:4:2}-1] ; month name, 0..11
michael@202 85 _date:[Aa]:. => digits/day-${SAY:16:1} ; day of week
michael@202 86 _date:[de]:. => num:${SAY:6:2} ; day of month
michael@202 87 _date:[hH]:. => num:${SAY:8:2} ; hour
michael@202 88 _date:[I]:. => num:$[${SAY:8:2} % 12] ; hour 0-12
michael@202 89 _date:[M]:. => num:${SAY:10:2} ; minute
michael@202 90 ; XXX too bad the '?' function does not remove the quotes
michael@202 91 ; _date:[pP]:. => digits/$[ ${SAY:10:2} > 12 ? "p-m" :: "a-m"] ; am pm
michael@202 92 _date:[pP]:. => digits/p-m ; am pm
michael@202 93 _date:[S]:. => num:${SAY:13:2} ; seconds
michael@202 94
michael@202 95 [en-base](!)
michael@202 96 _[n]um:0. => num:${SAY:1}
michael@202 97 _[n]um:X => digits/${SAY}
michael@202 98 _[n]um:1X => digits/${SAY}
michael@202 99 _[n]um:[2-9]0 => digits/${SAY}
michael@202 100 _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1}
michael@202 101 _[n]um:XXX => num:${SAY:0:1}, digits/hundred, num:${SAY:1}
michael@202 102
michael@202 103 _[n]um:XXXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1}
michael@202 104 _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
michael@202 105 _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3}
michael@202 106
michael@202 107 _[n]um:XXXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1}
michael@202 108 _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/million, num:${SAY:2}
michael@202 109 _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/million, num:${SAY:3}
michael@202 110
michael@202 111 _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1}
michael@202 112 _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2}
michael@202 113 _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3}
michael@202 114
michael@202 115 ; enumeration
michael@202 116 _e[n]um:X => digits/h-${SAY}
michael@202 117 _e[n]um:1X => digits/h-${SAY}
michael@202 118 _e[n]um:[2-9]0 => digits/h-${SAY}
michael@202 119 _e[n]um:[2-9][1-9] => num:${SAY:0:1}0, digits/h-${SAY:1}
michael@202 120 _e[n]um:[1-9]XX => num:${SAY:0:1}, digits/hundred, enum:${SAY:1}
michael@202 121
michael@202 122 [it](digit-base,date-base)
michael@202 123 _[n]um:0. => num:${SAY:1}
michael@202 124 _[n]um:X => digits/${SAY}
michael@202 125 _[n]um:1X => digits/${SAY}
michael@202 126 _[n]um:[2-9]0 => digits/${SAY}
michael@202 127 _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1}
michael@202 128 _[n]um:1XX => digits/hundred, num:${SAY:1}
michael@202 129 _[n]um:[2-9]XX => num:${SAY:0:1}, digits/hundred, num:${SAY:1}
michael@202 130
michael@202 131 _[n]um:1XXX => digits/thousand, num:${SAY:1}
michael@202 132 _[n]um:[2-9]XXX => num:${SAY:0:1}, digits/thousands, num:${SAY:1}
michael@202 133 _[n]um:XXXXX => num:${SAY:0:2}, digits/thousands, num:${SAY:2}
michael@202 134 _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousands, num:${SAY:3}
michael@202 135
michael@202 136 _[n]um:1XXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1}
michael@202 137 _[n]um:[2-9]XXXXXX => num:${SAY:0:1}, digits/millions, num:${SAY:1}
michael@202 138 _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2}
michael@202 139 _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3}
michael@202 140
michael@202 141 _datetime::. => date:AdBY 'digits/at' IMp:${SAY}
michael@202 142 _date::. => date:AdBY:${SAY}
michael@202 143 _time::. => date:IMp:${SAY}
michael@202 144
michael@202 145 [en](en-base,date-base,digit-base)
michael@202 146 _datetime::. => date:AdBY 'digits/at' IMp:${SAY}
michael@202 147 _date::. => date:AdBY:${SAY}
michael@202 148 _time::. => date:IMp:${SAY}
michael@202 149
michael@202 150 [de](date-base,digit-base)
michael@202 151 _[n]um:0. => num:${SAY:1}
michael@202 152 _[n]um:X => digits/${SAY}
michael@202 153 _[n]um:1X => digits/${SAY}
michael@202 154 _[n]um:[2-9]0 => digits/${SAY}
michael@202 155 _[n]um:[2-9][1-9] => digits/${SAY:1}-and, digits/${SAY:0:1}0
michael@202 156 _[n]um:1XX => digits/ein, digits/hundred, num:${SAY:1}
michael@202 157 _[n]um:[2-9]XX => digits/${SAY:0:1}, digits/hundred, num:${SAY:1}
michael@202 158 _[n]um:1XXX => digits/ein, digits/thousand, num:${SAY:1}
michael@202 159 _[n]um:[2-9]XXX => digits/${SAY:0:1}, digits/thousand, num:${SAY:1}
michael@202 160 _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
michael@202 161 _[n]um:X00XXX => digits/${SAY:0:1}, digits/hundred, digits/thousand, num:${SAY:3}
michael@202 162 _[n]um:XXXXXX => digits/${SAY:0:1}, digits/hundred, num:${SAY:1}
michael@202 163 _[n]um:1XXXXXX => digits/eine, digits/million, num:${SAY:1}
michael@202 164 _[n]um:[2-9]XXXXXX => digits/${SAY:0:1}, digits/millions, num:${SAY:1}
michael@202 165 _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2}
michael@202 166 _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3}
michael@202 167
michael@202 168 _datetime::. => date:AdBY 'digits/at' IMp:${SAY}
michael@202 169 _date::. => date:AdBY:${SAY}
michael@202 170 _time::. => date:IMp:${SAY}
michael@202 171

mercurial