say.conf 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. ;
  2. ; language configuration
  3. ;
  4. [general]
  5. mode=old ; method for playing numbers and dates
  6. ; old - using asterisk core function
  7. ; new - using this configuration file
  8. ; The new language routines produce strings of the form
  9. ; prefix:[format:]data
  10. ; that are matched against the rules in this file to produce
  11. ; an output.
  12. ;
  13. ; The data is generally the string to be spelled (either a number,
  14. ; an ascii string or a date/time in the format specified below).
  15. ; It is available, in the right hand side of a rule, as variable ${SAY}.
  16. ;
  17. ; The format is optional and normally used only for date/time.
  18. ; The prefix is used to select the pronunciation - standard
  19. ; prefixes are
  20. ; num used for numbers
  21. ; enum used for enumerations
  22. ; date for dates
  23. ; time for times
  24. ; datetime for dates and times
  25. ; char for character strings
  26. ; phonetic for phonetic strings
  27. ; digit for digit strings
  28. ;
  29. ; but others can be used at will.
  30. ;
  31. ; Processing occurs as follows:
  32. ; If the format is empty, or there is no format, the entire
  33. ; string is matched against one of the pattern on the left hand side.
  34. ; On the first match, the various comma-separated components on the right
  35. ; hand side are pronounced, as follows:
  36. ; + a component starting with a prefix: (i.e. with a ':' in it)
  37. ; is re-processed according to these rules;
  38. ; + a component without a ':' in it is considered a filename and
  39. ; the corresponding file is played.
  40. ;
  41. ; If the format is non-empty, the format is split into its components
  42. ; (individual characters, or filenames in single quotes), and then
  43. ; filenames are played, whereas single characters are used to
  44. ; generate a new string format:pat:data to be processed.
  45. ;
  46. ; DATES/AND TIMES assume that the date info is available in
  47. ; the form YYYYMMDDHHmm.ss-dow-doy
  48. ; with 4 digits for the year, 2 for month, day, hour, minutes, seconds,
  49. ; one digit for the day-of-week, and 3 digits for the day-of-year.
  50. ;
  51. ; Example:
  52. ; datetime::200604172030.00-4-102
  53. ; (typical format for a date) is first matched against the line
  54. ; datetime::. => date:AdBY 'digits/at' IMp:${SAY}
  55. ; which is normally present with the default format for dates.
  56. ; In turn, the format string "AdBY 'digits/at' IMp" results in
  57. ; the sequence
  58. ; date:A:200604172030.00-4-102
  59. ; date:d:200604172030.00-4-102
  60. ; date:B:200604172030.00-4-102
  61. ; date:Y:200604172030.00-4-102
  62. ; digits/at
  63. ; date:I:200604172030.00-4-102
  64. ; date:M:200604172030.00-4-102
  65. ; date:p:200604172030.00-4-102
  66. ;
  67. ;
  68. ; Remember, normally X Z N are special, and the search is
  69. ; case insensitive, so you must use [X] [N] [Z] .. if you
  70. ; want exact match.
  71. ; We start with the basic rules that might be more-or-less
  72. ; language-independent
  73. [digit-base](!) ; base rule for digit strings
  74. ; XXX incomplete yet
  75. _digit:[0-9] => digits/${SAY}
  76. _digit:[-] => letters/dash
  77. _digit:[*] => letters/star
  78. _digit:[@] => letters/at
  79. _digit:[0-9]. => digit:${SAY:0:1}, digit:${SAY:1}
  80. [date-base](!) ; base rules for dates and times
  81. ; the 'SAY' variable contains YYYYMMDDHHmm.ss-dow-doy
  82. ; these rule map the strftime attributes.
  83. _date:Y:. => num:${SAY:0:4} ; year, 19xx
  84. _date:[Bbh]:. => digits/mon-$[${SAY:4:2}-1] ; month name, 0..11
  85. _date:[Aa]:. => digits/day-${SAY:16:1} ; day of week
  86. _date:[de]:. => num:${SAY:6:2} ; day of month
  87. _date:[H]:. => digits/oh, num:${SAY:8:2} ; hour (oh one, oh two, ..., oh nine, ten, eleven, ..., twenty-three)
  88. _date:[I]:. => num:$[${SAY:8:2} % 12] ; hour 0-12
  89. _date:[M]:. => num:${SAY:10:2} ; minute
  90. ; XXX too bad the '?' function does not remove the quotes
  91. ; _date:[pP]:. => digits/$[ ${SAY:10:2} > 12 ? "p-m" :: "a-m"] ; am pm
  92. _date:[pP]:. => digits/p-m ; am pm
  93. _date:[S]:. => num:${SAY:13:2} ; seconds
  94. _date:[Ii]:. => num:$[${SAY:8:2} % 12] ; hour 0-12
  95. _date:[k]:. => num:${SAY:8:2} ; hour (one, two. three, ...,twenty three
  96. _date:[m]:. => num:${SAY:4:2} ; month number
  97. _date:[Q]:. => date:dby ;incompleat ; "today", "yesterday" or ABdY
  98. _date:[q]:. => date:dby ;incompleat ; "" (for today), "yesterday", weekday, or ABdY
  99. _date:[R]:. => date:HM${SAY} ; 24 hour time, including minute
  100. _date:[T]:. => date:HMS${SAY} ; 24 hour, minure, seconds
  101. [en-base](!)
  102. _[n]um:0. => num:${SAY:1}
  103. _[n]um:X => digits/${SAY}
  104. _[n]um:1X => digits/${SAY}
  105. _[n]um:[2-9]0 => digits/${SAY}
  106. _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1}
  107. _[n]um:X00 => num:${SAY:0:1}, digits/hundred
  108. _[n]um:XXX => num:${SAY:0:1}, digits/hundred, num:${SAY:1}
  109. _[n]um:X000 => num:${SAY:0:1}, digits/thousand
  110. _[n]um:XXXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1}
  111. _[n]um:XX000 => num:${SAY:0:2}, digits/thousand
  112. _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
  113. _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand
  114. _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3}
  115. _[n]um:X000000 => num:${SAY:0:1}, digits/million
  116. _[n]um:XXXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1}
  117. _[n]um:XX000000 => num:${SAY:0:2}, digits/million
  118. _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/million, num:${SAY:2}
  119. _[n]um:XXX000000 => num:${SAY:0:3}, digits/million
  120. _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/million, num:${SAY:3}
  121. _[n]um:X000000000 => num:${SAY:0:1}, digits/billion
  122. _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1}
  123. _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion
  124. _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2}
  125. _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion
  126. _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3}
  127. ; enumeration
  128. _e[n]um:X => digits/h-${SAY}
  129. _e[n]um:1X => digits/h-${SAY}
  130. _e[n]um:[2-9]0 => digits/h-${SAY}
  131. _e[n]um:[2-9][1-9] => num:${SAY:0:1}0, digits/h-${SAY:1}
  132. _e[n]um:[1-9]00 => num:${SAY:0:1}, digits/h-hundred
  133. _e[n]um:[1-9]XX => num:${SAY:0:1}, digits/h-hundred, enum:${SAY:1}
  134. [en_GB](date-base,digit-base,en-base)
  135. _[n]um:XXX => num:${SAY:0:1}, digits/hundred, vm-and, num:${SAY:1}
  136. [it](digit-base,date-base)
  137. _[n]um:0. => num:${SAY:1}
  138. _[n]um:X => digits/${SAY}
  139. _[n]um:1X => digits/${SAY}
  140. _[n]um:[2-9]0 => digits/${SAY}
  141. _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1}
  142. _[n]um:100 => digits/hundred
  143. _[n]um:1XX => digits/hundred, num:${SAY:1}
  144. _[n]um:[2-9]00 => num:${SAY:0:1}, digits/hundred
  145. _[n]um:[2-9]XX => num:${SAY:0:1}, digits/hundred, num:${SAY:1}
  146. _[n]um:1000 => digits/thousand
  147. _[n]um:1XXX => digits/thousand, num:${SAY:1}
  148. _[n]um:[2-9]000 => num:${SAY:0:1}, digits/thousands
  149. _[n]um:[2-9]XXX => num:${SAY:0:1}, digits/thousands, num:${SAY:1}
  150. _[n]um:XX000 => num:${SAY:0:2}, digits/thousands
  151. _[n]um:XXXXX => num:${SAY:0:2}, digits/thousands, num:${SAY:2}
  152. _[n]um:XXX000 => num:${SAY:0:3}, digits/thousands
  153. _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousands, num:${SAY:3}
  154. _[n]um:1000000 => num:${SAY:0:1}, digits/million
  155. _[n]um:1XXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1}
  156. _[n]um:[2-9]000000 => num:${SAY:0:1}, digits/millions
  157. _[n]um:[2-9]XXXXXX => num:${SAY:0:1}, digits/millions, num:${SAY:1}
  158. _[n]um:XX000000 => num:${SAY:0:2}, digits/millions
  159. _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2}
  160. _[n]um:XXX000000 => num:${SAY:0:3}, digits/millions
  161. _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3}
  162. _[n]um:X000000000 => num:${SAY:0:1}, digits/billion
  163. _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1}
  164. _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion
  165. _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2}
  166. _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion
  167. _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3}
  168. _datetime::. => date:AdBY 'digits/at' IMp:${SAY}
  169. _date::. => date:AdBY:${SAY}
  170. _time::. => date:IMp:${SAY}
  171. [en](en-base,date-base,digit-base)
  172. _datetime::. => date:AdBY 'digits/at' IMp:${SAY}
  173. _date::. => date:AdBY:${SAY}
  174. _time::. => date:IMp:${SAY}
  175. [de](date-base,digit-base)
  176. _[n]um:0. => num:${SAY:1}
  177. _[n]um:X => digits/${SAY}
  178. _[n]um:1X => digits/${SAY}
  179. _[n]um:[2-9]0 => digits/${SAY}
  180. _[n]um:[2-9][1-9] => digits/${SAY:1}-and, digits/${SAY:0:1}0
  181. _[n]um:100 => digits/ein, digits/hundred
  182. _[n]um:1XX => digits/ein, digits/hundred, num:${SAY:1}
  183. _[n]um:[2-9]00 => digits/${SAY:0:1}, digits/hundred
  184. _[n]um:[2-9]XX => digits/${SAY:0:1}, digits/hundred, num:${SAY:1}
  185. _[n]um:1000 => digits/ein, digits/thousand
  186. _[n]um:1XXX => digits/ein, digits/thousand, num:${SAY:1}
  187. _[n]um:[2-9]000 => digits/${SAY:0:1}, digits/thousand
  188. _[n]um:[2-9]XXX => digits/${SAY:0:1}, digits/thousand, num:${SAY:1}
  189. _[n]um:XX000 => num:${SAY:0:2}, digits/thousand
  190. _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
  191. _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand
  192. _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:1}
  193. _[n]um:1000000 => digits/eine, digits/million
  194. _[n]um:1XXXXXX => digits/eine, digits/million, num:${SAY:1}
  195. _[n]um:[2-9]000000 => digits/${SAY:0:1}, digits/millions
  196. _[n]um:[2-9]XXXXXX => digits/${SAY:0:1}, digits/millions, num:${SAY:1}
  197. _[n]um:XX000000 => num:${SAY:0:2}, digits/millions
  198. _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2}
  199. _[n]um:XXX000000 => num:${SAY:0:3}, digits/millions
  200. _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3}
  201. _datetime::. => date:AdBY 'digits/at' IMp:${SAY}
  202. _date::. => date:AdBY:${SAY}
  203. _time::. => date:IMp:${SAY}
  204. [hu](digit-base,date-base)
  205. _[n]um:0. => num:${SAY:1}
  206. _[n]um:X => digits/${SAY}
  207. _[n]um:1[1-9] => digits/10en, digits/${SAY:1}
  208. _[n]um:2[1-9] => digits/20on, digits/${SAY:1}
  209. _[n]um:[1-9]0 => digits/${SAY}
  210. _[n]um:[3-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1}
  211. _[n]um:XXX => num:${SAY:0:1}, digits/hundred, num:${SAY:1}
  212. _[n]um:X000 => num:${SAY:0:1}, digits/thousand
  213. _[n]um:XXXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1}
  214. _[n]um:XX000 => num:${SAY:0:2}, digits/thousand
  215. _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
  216. _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand
  217. _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3}
  218. _[n]um:X000000 => num:${SAY:0:1}, digits/million
  219. _[n]um:XXXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1}
  220. _[n]um:XX000000 => num:${SAY:0:2}, digits/million
  221. _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/million, num:${SAY:2}
  222. _[n]um:XXX000000 => num:${SAY:0:3}, digits/million
  223. _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/million, num:${SAY:3}
  224. _[n]um:X000000000 => num:${SAY:0:1}, digits/billion
  225. _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1}
  226. _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion
  227. _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2}
  228. _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion
  229. _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3}
  230. _datetime::. => date:YBdA k 'ora' M 'perc':${SAY}
  231. _date::. => date:YBdA:${SAY}
  232. _time::. => date:k 'ora' M 'perc':${SAY}
  233. [fr](date-base,digit-base)
  234. _[n]um:0. => num:${SAY:1}
  235. _[n]um:X => digits/${SAY}
  236. _[n]um:1X => digits/${SAY}
  237. _[n]um:[2-9]0 => digits/${SAY}
  238. _[n]um:[2-6]1 => digits/${SAY:0:1}0, vm-and, digits/${SAY:1}
  239. _[n]um:71 => digits/60, vm-and, num:1${SAY:1}
  240. _[n]um:7X => digits/60, num:1${SAY:1}
  241. _[n]um:9X => digits/80, num:1${SAY:1}
  242. _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1}
  243. _[n]um:100 => digits/hundred
  244. _[n]um:1XX => digits/hundred, num:${SAY:1}
  245. _[n]um:[2-9]00 => num:${SAY:0:1}, digits/hundred
  246. _[n]um:[2-9]XX => num:${SAY:0:1}, digits/hundred, num:${SAY:1}
  247. _[n]um:1000 => digits/thousand
  248. _[n]um:1XXX => digits/thousand, num:${SAY:1}
  249. _[n]um:[2-9]000 => num:${SAY:0:1}, digits/thousand
  250. _[n]um:[2-9]XXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1}
  251. _[n]um:XX000 => num:${SAY:0:2}, digits/thousand
  252. _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
  253. _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand
  254. _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3}
  255. _[n]um:1000000 => num:${SAY:0:1}, digits/million
  256. _[n]um:1XXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1}
  257. _[n]um:[2-9]000000 => num:${SAY:0:1}, digits/million
  258. _[n]um:[2-9]XXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1}
  259. _[n]um:XX000000 => num:${SAY:0:2}, digits/million
  260. _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/million, num:${SAY:2}
  261. _[n]um:XXX000000 => num:${SAY:0:3}, digits/million
  262. _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/million, num:${SAY:3}
  263. _datetime::. => date:AdBY 'digits/at' H 'hours' M 'perc':${SAY}
  264. _date::. => date:AdBY:${SAY}
  265. _time::. => date:H 'hours' M 'perc':${SAY}
  266. _pho[n]e:XXXX => num:${SAY:0:2}, num:${SAY:2:2}
  267. _pho[n]e:0[1-9]XXXXXXXX => num:${SAY:0:1}, num:${SAY:1:1}, num:${SAY:2:2}, num:${SAY:4:2}, num:${SAY:6:2}, num:${SAY:8:2}
  268. _pho[n]e:. => digit:${SAY}
  269. [es](date-base,digit-base)
  270. _[n]um:0. => num:${SAY:1}
  271. _[n]um:X => digits/${SAY}
  272. _[n]um:1X => digits/${SAY}
  273. _[n]um:[2-9]0 => digits/${SAY}
  274. _[n]um:2[1-9] => digits/20-and, digits/${SAY:1}
  275. _[n]um:[3-9][1-9] => digits/${SAY:0:1}0, vm-and, digits/${SAY:1}
  276. _[n]um:100 => digits/hundred
  277. _[n]um:1XX => digits/100-and, num:${SAY:1}
  278. _[n]um:[2-9]00 => digits/${SAY}
  279. _[n]um:[2-9]XX => digits/${SAY:0:1}00, num:${SAY:1}
  280. _[n]um:1000 => digits/thousand
  281. _[n]um:1XXX => digits/thousand, num:${SAY:1}
  282. _[n]um:[2-9]000 => num:${SAY:0:1}, digits/thousand
  283. _[n]um:[2-9]XXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1}
  284. _[n]um:XX000 => num:${SAY:0:2}, digits/thousand
  285. _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
  286. _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand
  287. _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3}
  288. _[n]um:1000000 => digits/1M, digits/million
  289. _[n]um:1XXXXXX => digits/1M, digits/million, num:${SAY:1}
  290. _[n]um:[2-9]000000 => num:${SAY:0:1}, digits/millions
  291. _[n]um:[2-9]XXXXXX => num:${SAY:0:1}, digits/millions, num:${SAY:1}
  292. _[n]um:XX000000 => num:${SAY:0:2}, digits/millions
  293. _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2}
  294. _[n]um:XXX000000 => num:${SAY:0:3}, digits/millions
  295. _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3}
  296. _[n]um:XXXX000000 => num:${SAY:0:4}, digits/millions
  297. _[n]um:XXXXXXXXXX => num:${SAY:0:4}, digits/millions, num:${SAY:4}
  298. _datetime::. => date:Ad 'letters/d' B 'letters/d' Y 'digits/at' HMp:${SAY}
  299. _date::. => date:Ad 'letters/d' B 'letters/d' Y:${SAY}
  300. _time::. => date:HMp:${SAY}
  301. [da](date-base,digit-base)
  302. _[n]um:0. => num:${SAY:1}
  303. _[n]um:X => digits/${SAY}
  304. _[n]um:1X => digits/${SAY}
  305. _[n]um:[2-9]0 => digits/${SAY}
  306. _[n]um:[2-9][1-9] => digits/${SAY:1}-and, digits/${SAY:0:1}0
  307. _[n]um:100 => digits/1N, digits/hundred
  308. _[n]um:1XX => digits/1N, digits/hundred, num:${SAY:1}
  309. _[n]um:[2-9]00 => digits/${SAY:0:1}, digits/hundred
  310. _[n]um:[2-9]XX => digits/${SAY:0:1}, digits/hundred, num:${SAY:1}
  311. _[n]um:1000 => digits/1N, digits/thousand
  312. _[n]um:1XXX => digits/1N, digits/thousand, num:${SAY:1}
  313. _[n]um:[2-9]000 => digits/${SAY:0:1}, digits/thousand
  314. _[n]um:[2-9]XXX => digits/${SAY:0:1}, digits/thousand, num:${SAY:1}
  315. _[n]um:XX000 => num:${SAY:0:2}, digits/thousand
  316. _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2}
  317. _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand
  318. _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3}
  319. _[n]um:X000000 => digits/${SAY:0:1}, digits/million
  320. _[n]um:XXXXXXX => digits/${SAY:0:1}, digits/million, num:${SAY:1}
  321. _[n]um:XX000000 => num:${SAY:0:2}, digits/millions
  322. _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2}
  323. _[n]um:XXX000000 => num:${SAY:0:3}, digits/millions
  324. _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3}
  325. _[n]um:X000000000 => num:${SAY:0:1}, digits/billion
  326. _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1}
  327. _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion
  328. _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2}
  329. _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion
  330. _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3}
  331. _datetime::. => date:AdBY 'digits/at' kM:${SAY}
  332. _date::. => date:AdBY:${SAY}
  333. _time::. => date:HM:${SAY}
  334. ; enumeration
  335. _e[n]um:X => digits/h-${SAY}
  336. _e[n]um:1X => digits/h-${SAY}
  337. _e[n]um:[2-9]0 => digits/h-${SAY}
  338. _e[n]um:[2-9][1-9] => digits/${SAY:1}-and, digits/h-${SAY:0:1}0
  339. _e[n]um:100 => digits/1N, digits/h-hundred
  340. _e[n]um:1XX => digits/1N, digits/h-hundred, enum:${SAY:1}
  341. _e[n]um:[2-9]00 => num:${SAY:0:1}, digits/h-hundred
  342. _e[n]um:[2-9]XX => num:${SAY:0:1}, digits/h-hundred, enum:${SAY:1}
  343. [farsi](digit-base,date-base)
  344. _[n]um:0. => num:${SAY:1}
  345. _[n]um:X => digits/${SAY}
  346. _[n]um:1X => digits/${SAY}
  347. _[n]um:[2-9]0 => digits/${SAY}
  348. _[n]um:2X => digits/20-o, num:${SAY:1}
  349. _[n]um:3X => digits/30-o, num:${SAY:1}
  350. _[n]um:4X => digits/40-o, num:${SAY:1}
  351. _[n]um:5X => digits/50-o, num:${SAY:1}
  352. _[n]um:6X => digits/60-o, num:${SAY:1}
  353. _[n]um:7X => digits/70-o, num:${SAY:1}
  354. _[n]um:8X => digits/80-o, num:${SAY:1}
  355. _[n]um:9X => digits/90-o, num:${SAY:1}
  356. _[n]um:100 => digits/hundred
  357. _[n]um:1XX => digits/hundred-o, num:${SAY:1}
  358. _[n]um:200 => digits/200
  359. _[n]um:2XX => digits/200-o, num:${SAY:1}
  360. _[n]um:300 => digits/300
  361. _[n]um:3XX => digits/300-o, num:${SAY:1}
  362. _[n]um:400 => digits/400
  363. _[n]um:4XX => digits/400-o, num:${SAY:1}
  364. _[n]um:500 => digits/500
  365. _[n]um:5XX => digits/500-o, num:${SAY:1}
  366. _[n]um:600 => digits/600
  367. _[n]um:6XX => digits/600-o, num:${SAY:1}
  368. _[n]um:700 => digits/700
  369. _[n]um:7XX => digits/700-o, num:${SAY:1}
  370. _[n]um:800 => digits/800
  371. _[n]um:8XX => digits/800-o, num:${SAY:1}
  372. _[n]um:900 => digits/900
  373. _[n]um:9XX => digits/900-o, num:${SAY:1}
  374. _[n]um:X000 => num:${SAY:0:1}, digits/thousand
  375. _[n]um:1XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  376. _[n]um:2XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  377. _[n]um:3XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  378. _[n]um:4XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  379. _[n]um:5XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  380. _[n]um:6XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  381. _[n]um:7XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  382. _[n]um:8XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  383. _[n]um:9XXX => num:${SAY:0:1}, digits/thousand-o, num:${SAY:1}
  384. _[n]um:XX000 => num:${SAY:0:2}, digits/thousand
  385. _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand-o, num:${SAY:2}
  386. _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand
  387. _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand-o, num:${SAY:3}
  388. _[n]um:X000000 => num:${SAY:0:1}, digits/million
  389. _[n]um:XXXXXXX => num:${SAY:0:1}, digits/million-o, num:${SAY:1}
  390. _[n]um:XX000000 => num:${SAY:0:2}, digits/million
  391. _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/million-o, num:${SAY:2}
  392. _[n]um:XXX000000 => num:${SAY:0:3}, digits/million
  393. _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/million-o, num:${SAY:3}
  394. _[n]um:X000000000 => num:${SAY:0:1}, digits/billion
  395. _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion-o, num:${SAY:1}
  396. _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion
  397. _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion-o, num:${SAY:2}
  398. _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion
  399. _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion-o, num:${SAY:3}
  400. ; enumeration
  401. _e[n]um:X => digits/h-${SAY}
  402. _e[n]um:1X => digits/h-${SAY}
  403. _e[n]um:[2-9]0 => digits/h-${SAY}
  404. _e[n]um:[2-9][1-9] => num:${SAY:0:1}0, digits/h-${SAY:1}
  405. _e[n]um:[1-9]XX => num:${SAY:0:1}, digits/hundred, enum:${SAY:1}