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