asterisk/say.conf

Mon, 27 Apr 2009 12:19:05 +0200

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Mon, 27 Apr 2009 12:19:05 +0200
changeset 202
f29abea29121
permissions
-rw-r--r--

Import new package spec for introduction into repository.

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