Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2439 lines
60 KiB

  1. <GRAMMAR LANGID="409">
  2. <DEFINE>
  3. <ID NAME="BILLIONS" VAL="1"/>
  4. <ID NAME="MILLIONS" VAL="2"/>
  5. <ID NAME="THOUSANDS" VAL="3"/>
  6. <ID NAME="HUNDREDS" VAL="4"/>
  7. <ID NAME="TENS" VAL="5"/>
  8. <ID NAME="ONES" VAL="6"/>
  9. <ID NAME="NEGATIVE" VAL="7"/>
  10. <ID NAME="MILLBILL" VAL="8"/>
  11. <ID NAME="DIGIT" VAL="9"/>
  12. <ID NAME="TWODIGIT" VAL="10"/>
  13. <ID NAME="FP_PART" VAL="11"/>
  14. <ID NAME="ZERO" VAL="12"/>
  15. <ID NAME="POINT_ZERO" VAL="13"/>
  16. <ID NAME="NUMERATOR" VAL="14"/>
  17. <ID NAME="DENOMINATOR" VAL="15"/>
  18. <ID NAME="WHOLE" VAL="16"/>
  19. <ID NAME="ONEDIGIT" VAL="17"/>
  20. <ID NAME="DAY_OF_WEEK" VAL="30"/>
  21. <ID NAME="DAY_OF_MONTH" VAL="31"/>
  22. <ID NAME="MONTH" VAL="32"/>
  23. <ID NAME="YEAR" VAL="33"/>
  24. <ID NAME="TWOTHOUSAND" VAL="34"/>
  25. <ID NAME="DATE_HUNDREDS" VAL="35"/>
  26. <ID NAME="YEARMONTH" VAL="36"/>
  27. <ID NAME="MONTHYEAR" VAL="37"/>
  28. <ID NAME="QUARTER_TO" VAL="40"/>
  29. <ID NAME="QUARTER_PAST" VAL="41"/>
  30. <ID NAME="HALF_PAST" VAL="42"/>
  31. <ID NAME="CLOCKTIME_QUALIFIER" VAL="43"/>
  32. <ID NAME="HOUR_CLOCK" VAL="44"/>
  33. <ID NAME="HOUR_COUNT" VAL="45"/>
  34. <ID NAME="MINUTE" VAL="46"/>
  35. <ID NAME="SECOND" VAL="47"/>
  36. <ID NAME="AMPM" VAL="50"/>
  37. <ID NAME="AM" VAL="51"/>
  38. <ID NAME="PM" VAL="52"/>
  39. <ID NAME="US_STATE" VAL="60"/>
  40. <ID NAME="ZIPCODE" VAL="61"/>
  41. <ID NAME="CAN_PROVINCE" VAL="62"/>
  42. <ID NAME="ALPHA" VAL="63"/>
  43. <ID NAME="FOURDIGITS" VAL="64"/>
  44. <ID NAME="COMMA" VAL="65"/>
  45. <ID NAME="ONE_PLUS" VAL="70"/>
  46. <ID NAME="AREA_CODE" VAL="71"/>
  47. <ID NAME="PHONENUM_EXCHANGE" VAL="72"/>
  48. <ID NAME="EXTENSION" VAL="73"/>
  49. <ID NAME="TEMP_UNITS" VAL="80"/>
  50. <ID NAME="DIRECTION" VAL="81"/>
  51. <ID NAME="UNITS" VAL="90"/>
  52. <ID NAME="NUMBER" VAL="91"/>
  53. <ID NAME="CURRENCY_TYPE" VAL="100"/>
  54. <ID NAME="DOLLARS" VAL="101"/>
  55. <ID NAME="CENTS" VAL="102"/>
  56. <ID NAME="CURRENCY_SMALL_TYPE" VAL="103"/>
  57. <ID NAME="GRID_INTEGER_99" VAL="1001"/>
  58. <ID NAME="GRID_INTEGER_999" VAL="1002"/>
  59. <ID NAME="GRID_INTEGER_MILLBILL" VAL="1003"/>
  60. <ID NAME="GRID_INTEGER_STANDALONE" VAL="1004"/>
  61. <ID NAME="GRID_INTEGER" VAL="1005"/>
  62. <ID NAME="GRID_INTEGER_NONNEG" VAL="1006"/>
  63. <ID NAME="GRID_DIGIT_NUMBER" VAL="1007"/>
  64. <ID NAME="GRID_FP_NUMBER" VAL="1008"/>
  65. <ID NAME="GRID_FP_NUMBER_NONNEG" VAL="1009"/>
  66. <ID NAME="GRID_ORDINAL" VAL="1010"/>
  67. <ID NAME="GRID_DENOMINATOR_SINGULAR" VAL="1011"/>
  68. <ID NAME="GRID_DENOMINATOR" VAL="1012"/>
  69. <ID NAME="GRID_FRACTION" VAL="1013"/>
  70. <ID NAME="GRID_DATE" VAL="1014"/>
  71. <ID NAME="GRID_YEAR" VAL="1015"/>
  72. <ID NAME="GRID_TIME" VAL="1016"/>
  73. <ID NAME="GRID_MINSEC" VAL="1017"/>
  74. <ID NAME="GRID_CLOCK_MINSEC" VAL="1018"/>
  75. <ID NAME="GRID_STATEZIP" VAL="1019"/>
  76. <ID NAME="GRID_ZIPCODE" VAL="1020"/>
  77. <ID NAME="GRID_CAN_ZIPCODE" VAL="1021"/>
  78. <ID NAME="GRID_ZIP_PLUS_FOUR" VAL="1022"/>
  79. <ID NAME="GRID_PHONE_NUMBER" VAL="1023"/>
  80. <ID NAME="GRID_DEGREES" VAL="1024"/>
  81. <ID NAME="GRID_MEASUREMENT" VAL="1025"/>
  82. <ID NAME="GRID_CURRENCY" VAL="1026"/>
  83. <ID NAME="GRID_CENTS" VAL="1027"/>
  84. <ID NAME="COMMON_GRID_MEASURMEMENT" VAL="1028"/>
  85. </DEFINE>
  86. <!--
  87. GRID_PHONE_NUMBER
  88. Needs to precede GRID_INTEGER so that if there is any ambiguity we
  89. will fire this rule.
  90. A phone number is an optional area code, three digits, four digits,
  91. and an optional extension number
  92. -->
  93. <RULE NAME="GRID_PHONE_NUMBER" ID="GRID_PHONE_NUMBER" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
  94. <O>
  95. <O>
  96. <RULEREF NAME="one_plus" PROPNAME="ONE_PLUS" PROPID="ONE_PLUS"/>
  97. </O>
  98. <P>
  99. <RULEREF NAME="area_code" PROPNAME="AREA_CODE" PROPID="AREA_CODE"/>
  100. </P>
  101. <O>
  102. <RULEREF NAME="dash_slash"/>
  103. </O>
  104. </O>
  105. <P>
  106. <RULEREF NAME="three_digits_phone" PROPNAME="PHONENUM_EXCHANGE" PROPID="PHONENUM_EXCHANGE"/>
  107. </P>
  108. <O>
  109. <RULEREF NAME="dash_slash"/>
  110. </O>
  111. <P>
  112. <RULEREF NAME="four_digits" PROPNAME="FOURDIGITS" PROPID="FOURDIGITS"/>
  113. </P>
  114. <O>
  115. <L>
  116. <P>
  117. ext.
  118. </P>
  119. <P>
  120. extension
  121. </P>
  122. <P>
  123. X.
  124. </P>
  125. </L>
  126. <P>
  127. <RULEREF NAME="extension" PROPNAME="EXTENSION" PROPID="EXTENSION"/>
  128. </P>
  129. </O>
  130. </RULE>
  131. <!--
  132. INTEGER_99
  133. Numbers in [0, 100)
  134. Toplevel inactive but can be imported
  135. -->
  136. <RULE NAME="GRID_INTEGER_99" ID="GRID_INTEGER_99" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  137. <RULEREF NAME="cardinal_99" PROPNAME="ONES" PROPID="ONES"/>
  138. </RULE>
  139. <!--
  140. INTEGER_999
  141. Numbers in [0, 1000)
  142. Toplevel inactive but can be imported
  143. -->
  144. <RULE NAME="GRID_INTEGER_999" ID="GRID_INTEGER_999" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  145. <RULEREF NAME="cardinal_999" PROPNAME="ONES" PROPID="ONES"/>
  146. </RULE>
  147. <!--
  148. INTEGER_MILLBILL
  149. Numbers for which the word "million" or "billion" should be displayed
  150. -->
  151. <RULE NAME="GRID_INTEGER_MILLBILL" ID="GRID_INTEGER_MILLBILL" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  152. <L>
  153. <P>
  154. <RULEREF NAME="GRID_INTEGER_99" PROPNAME="GRID_INTEGER_99" PROPID="GRID_INTEGER_99"/>
  155. </P>
  156. <P>
  157. <RULEREF NAME="GRID_FP_NUMBER_NONNEG" PROPNAME="GRID_FP_NUMBER_NONNEG" PROPID="GRID_FP_NUMBER_NONNEG"/>
  158. </P>
  159. </L>
  160. <L PROPNAME="MILLBILL" PROPID="MILLBILL">
  161. <P VAL="MILLIONS" VALSTR="million">million</P>
  162. <P VAL="BILLIONS" VALSTR="billion">billion</P>
  163. </L>
  164. </RULE>
  165. <!-- Removed ID="GRID_INTEGER_MILLBILL" -->
  166. <RULE NAME="GRID_INTEGER_20_MILLBILL" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  167. <L>
  168. <P>
  169. <RULEREF NAME="cardinal_20_999" PROPNAME="GRID_INTEGER_99" PROPID="GRID_INTEGER_99"/>
  170. </P>
  171. <P>
  172. <RULEREF NAME="GRID_FP_NUMBER_NONNEG" PROPNAME="GRID_FP_NUMBER_NONNEG" PROPID="GRID_FP_NUMBER_NONNEG"/>
  173. </P>
  174. </L>
  175. <L PROPNAME="MILLBILL" PROPID="MILLBILL">
  176. <P VAL="MILLIONS" VALSTR="million">million</P>
  177. <P VAL="BILLIONS" VALSTR="billion">billion</P>
  178. </L>
  179. </RULE>
  180. <!--
  181. INTEGER_STANDALONE
  182. A INTEGER_STANDALONE can be in the range (-1e12, 1e12) and will always be
  183. called as a toplevel rule.
  184. This rule is not referenced by any other rules.
  185. -->
  186. <RULE NAME="GRID_INTEGER_STANDALONE" ID="GRID_INTEGER_STANDALONE" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
  187. <L>
  188. <P>
  189. <O>
  190. <RULEREF NAME="NEGATIVE" PROPNAME="NEGATIVE" PROPID="NEGATIVE"/>
  191. </O>
  192. <P>
  193. <RULEREF NAME="GRID_INTEGER_MILLBILL" PROPNAME="GRID_INTEGER_MILLBILL" PROPID="GRID_INTEGER_MILLBILL"/>
  194. </P>
  195. </P>
  196. <P>
  197. <RULEREF NAME="integer_base"/>
  198. </P>
  199. </L>
  200. </RULE>
  201. <!--
  202. INTEGER
  203. A INTEGER can be in the range (-1e12, 1e12) and will never be called
  204. as a toplevel rule
  205. -->
  206. <RULE NAME="GRID_INTEGER" ID="GRID_INTEGER" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  207. <RULEREF NAME="integer_base"/>
  208. </RULE>
  209. <!--
  210. INTEGER_NONNEG
  211. A INTEGER_NONNEG can be in the range [0, 1e12) and will never be called
  212. as a toplevel rule
  213. -->
  214. <RULE NAME="GRID_INTEGER_NONNEG" ID="GRID_INTEGER_NONNEG" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  215. <RULEREF NAME="integer_base_nonneg"/>
  216. </RULE>
  217. <!--
  218. DIGIT_NUMBER
  219. Integers in (0, 1e12), spelled out either one digit at a time or two digits
  220. at a time.
  221. This rule is an INACTIVE toplevel rule, since it should go through GRID_INTEGER
  222. to be formatted.
  223. Explicitly disallow TWODIGIT DIGIT since that is ambiguous with "twenty five"
  224. -->
  225. <RULE NAME="GRID_DIGIT_NUMBER" ID="GRID_DIGIT_NUMBER" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  226. <L>
  227. <P MIN="3" MAX="12">
  228. <L>
  229. <P>
  230. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  231. </P>
  232. <P>
  233. <RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
  234. </P>
  235. </L>
  236. </P>
  237. <P>
  238. <P>
  239. <RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
  240. </P>
  241. <P>
  242. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  243. </P>
  244. </P>
  245. <P MIN="2" MAX="2">
  246. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  247. </P>
  248. <P MIN="2" MAX="2">
  249. <RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
  250. </P>
  251. </L>
  252. </RULE>
  253. <!--
  254. FP_NUMBER
  255. Floating-point numbers with up to 12 sig figs. Both the stuff to the left of the
  256. decimal point and the stuff to the right of the decimal point can be either
  257. NUMBERs or DIGIT_NUMBERs
  258. -->
  259. <RULE NAME="GRID_FP_NUMBER" ID="GRID_FP_NUMBER" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="1">
  260. <O>
  261. <RULEREF NAME="NEGATIVE" PROPNAME="NEGATIVE" PROPID="NEGATIVE"/>
  262. </O>
  263. <P>
  264. <RULEREF NAME="fp_number_nonneg"/>
  265. </P>
  266. </RULE>
  267. <RULE NAME="GRID_FP_NUMBER_NONNEG" ID="GRID_FP_NUMBER_NONNEG" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  268. <RULEREF NAME="fp_number_nonneg"/>
  269. </RULE>
  270. <!--
  271. ORDINAL
  272. Ordinal numbers from "zeroth" to "999,999,999,999th"
  273. Not a toplevel rule; will fire only as part of another rule
  274. -->
  275. <RULE NAME="GRID_ORDINAL" ID="GRID_ORDINAL" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  276. <L>
  277. <P>
  278. <!-- If a cardinal big_part is there, the ordinal ending must be there -->
  279. <O>
  280. <RULEREF NAME="big_part"/>
  281. </O>
  282. <P>
  283. <RULEREF NAME="ordinal_999" PROPNAME="ONES" PROPID="ONES"/>
  284. </P>
  285. </P>
  286. <P>
  287. <!--Something like "three thousandth"-->
  288. <RULEREF NAME="big_part_ord"/>
  289. </P>
  290. </L>
  291. </RULE>
  292. <!--
  293. DENOMINATOR_SINGULAR
  294. Almost exactly the same as an ORDINAL, but "half" replaces "second"
  295. -->
  296. <RULE NAME="GRID_DENOMINATOR_SINGULAR" ID="GRID_DENOMINATOR_SINGULAR" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  297. <L>
  298. <P>
  299. <O>
  300. <RULEREF NAME="big_part"/>
  301. </O>
  302. <P>
  303. <RULEREF NAME="ordinal_999_den_singular" PROPNAME="ONES" PROPID="ONES"/>
  304. </P>
  305. </P>
  306. <P>
  307. <RULEREF NAME="big_part_ord"/>
  308. </P>
  309. </L>
  310. </RULE>
  311. <!--
  312. DENOMINATOR
  313. Almost exactly the same as ORDINALs. The only difference is the plural
  314. ("thirds" instead of "third")
  315. -->
  316. <RULE NAME="GRID_DENOMINATOR" ID="GRID_DENOMINATOR" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  317. <L>
  318. <P>
  319. <O>
  320. <RULEREF NAME="big_part"/>
  321. </O>
  322. <P>
  323. <RULEREF NAME="ordinal_999_den" PROPNAME="ONES" PROPID="ONES"/>
  324. </P>
  325. </P>
  326. <P>
  327. <RULEREF NAME="big_part_ord_den"/>
  328. </P>
  329. </L>
  330. </RULE>
  331. <!--
  332. FRACTION
  333. Can be expressed as either "three over four" or "three fourths".
  334. Numerator and denominator both are allowed to be in the range (-1e12, 1e12).
  335. The ITN-interpreting code must be prepared to handle zero denominators.
  336. -->
  337. <RULE NAME="GRID_FRACTION" ID="GRID_FRACTION" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="1">
  338. <O>
  339. <!-- Optional whole part -->
  340. <RULEREF NAME="GRID_INTEGER" PROPNAME="WHOLE" PROPID="WHOLE"/>
  341. <P>
  342. and
  343. </P>
  344. </O>
  345. <L>
  346. <P>
  347. <L>
  348. <P>
  349. <RULEREF NAME="GRID_INTEGER" PROPNAME="NUMERATOR" PROPID="NUMERATOR"/>
  350. </P>
  351. <P>
  352. <RULEREF NAME="GRID_DIGIT_NUMBER" PROPNAME="NUMERATOR" PROPID="NUMERATOR"/>
  353. </P>
  354. <P PROPNAME="ZERO" PROPID="ZERO" VAL="0">
  355. oh
  356. </P>
  357. </L>
  358. <L>
  359. <P>
  360. over
  361. </P>
  362. <P>
  363. ?forward slash
  364. </P>
  365. </L>
  366. <L>
  367. <P>
  368. <RULEREF NAME="GRID_INTEGER" PROPNAME="DENOMINATOR" PROPID="DENOMINATOR"/>
  369. </P>
  370. <P>
  371. <RULEREF NAME="GRID_DIGIT_NUMBER" PROPNAME="DENOMINATOR" PROPID="DENOMINATOR"/>
  372. </P>
  373. </L>
  374. </P>
  375. <P>
  376. <L>
  377. <P>
  378. <P>
  379. <RULEREF NAME="GRID_INTEGER" PROPNAME="NUMERATOR" PROPID="NUMERATOR"/>
  380. </P>
  381. <P>
  382. <RULEREF NAME="GRID_DENOMINATOR" PROPNAME="DENOMINATOR" PROPID="DENOMINATOR"/>
  383. </P>
  384. </P>
  385. <P>
  386. <P>
  387. one
  388. </P>
  389. <P>
  390. <RULEREF NAME="GRID_DENOMINATOR_SINGULAR" PROPNAME="GRID_DENOMINATOR_SINGULAR" PROPID="DENOMINATOR"/>
  391. </P>
  392. </P>
  393. </L>
  394. </P>
  395. </L>
  396. </RULE>
  397. <!--
  398. DATE
  399. Spoken dates.
  400. -->
  401. <RULE NAME="GRID_DATE" ID="GRID_DATE" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
  402. <L>
  403. <P>
  404. <O>
  405. <RULEREF NAME="day_of_week"/>
  406. </O>
  407. <L>
  408. <P>
  409. <RULEREF NAME="month"/>
  410. <RULEREF NAME="day_of_month"/>
  411. </P>
  412. <P>
  413. <RULEREF NAME="day_of_month"/>
  414. <RULEREF NAME="month_capital_necessary"/>
  415. </P>
  416. </L>
  417. <O>
  418. <RULEREF NAME="GRID_YEAR" PROPNAME="YEAR" PROPID="YEAR"/>
  419. </O>
  420. </P>
  421. <P>
  422. <RULEREF NAME="month_year" PROPNAME="MONTHYEAR" PROPID="MONTHYEAR"/>
  423. </P>
  424. <P>
  425. <RULEREF NAME="year_month" PROPNAME="YEARMONTH" PROPID="YEARMONTH"/>
  426. </P>
  427. </L>
  428. </RULE>
  429. <!--
  430. YEAR
  431. Spoken year.
  432. -->
  433. <RULE NAME="GRID_YEAR" ID="GRID_YEAR" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  434. <L>
  435. <P>
  436. <P>
  437. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  438. </P>
  439. <O>
  440. <P>
  441. hundred
  442. </P>
  443. <O>
  444. and
  445. </O>
  446. </O>
  447. <P>
  448. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  449. </P>
  450. </P>
  451. <P>
  452. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  453. </P>
  454. <P MIN="4" MAX="4">
  455. <RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
  456. </P>
  457. <P>
  458. <P PROPNAME="TWOTHOUSAND" PROPID="TWOTHOUSAND" VAL="2000">
  459. two thousand
  460. </P>
  461. <O>
  462. <O>
  463. and
  464. </O>
  465. <L>
  466. <P>
  467. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  468. </P>
  469. <P>
  470. <RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
  471. </P>
  472. </L>
  473. </O>
  474. </P>
  475. <!--
  476. <P>
  477. <P>
  478. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  479. </P>
  480. <P PROPNAME="DATE_HUNDREDS" PROPID="DATE_HUNDREDS" VAL="100">
  481. hundred
  482. </P>
  483. </P>
  484. -->
  485. <P>
  486. <RULEREF NAME="date_hundreds" PROPNAME="DATE_HUNDREDS" PROPID="DATE_HUNDREDS"/>
  487. </P>
  488. </L>
  489. </RULE>
  490. <!--
  491. TIME
  492. Spoken time.
  493. -->
  494. <RULE NAME="GRID_TIME" ID="GRID_TIME" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
  495. <L>
  496. <P>
  497. <P>
  498. <RULEREF NAME="clock_hour"/>
  499. </P>
  500. <P>
  501. o'clock
  502. </P>
  503. <O>
  504. <RULEREF NAME="am_pm"/>
  505. </O>
  506. </P>
  507. <P>
  508. <P>
  509. <RULEREF NAME="clock_hour"/>
  510. </P>
  511. <O>
  512. <RULEREF NAME="GRID_CLOCK_MINSEC" PROPNAME="MINUTE" PROPID="MINUTE"/>
  513. </O>
  514. <P>
  515. <RULEREF NAME="am_pm"/>
  516. </P>
  517. </P>
  518. <P>
  519. <P>
  520. <RULEREF NAME="GRID_INTEGER_999" PROPNAME="HOUR_COUNT" PROPID="HOUR_COUNT"/>
  521. </P>
  522. <L>
  523. <P>
  524. hours
  525. </P>
  526. <P>
  527. hour
  528. </P>
  529. </L>
  530. <O>
  531. and
  532. </O>
  533. <L>
  534. <P>
  535. <P>
  536. <RULEREF NAME="GRID_MINSEC" PROPNAME="MINUTE" PROPID="MINUTE"/>
  537. </P>
  538. <L>
  539. <P>
  540. minutes
  541. </P>
  542. <P>
  543. minute
  544. </P>
  545. </L>
  546. <O>
  547. <O>
  548. and
  549. </O>
  550. <P>
  551. <RULEREF NAME="GRID_MINSEC" PROPNAME="SECOND" PROPID="SECOND"/>
  552. </P>
  553. <L>
  554. <P>
  555. seconds
  556. </P>
  557. <P>
  558. second
  559. </P>
  560. </L>
  561. </O>
  562. </P>
  563. <P>
  564. <P>
  565. <RULEREF NAME="GRID_MINSEC" PROPNAME="SECOND" PROPID="SECOND"/>
  566. </P>
  567. <L>
  568. <P>
  569. seconds
  570. </P>
  571. <P>
  572. second
  573. </P>
  574. </L>
  575. </P>
  576. </L>
  577. </P>
  578. <P>
  579. <O>
  580. a
  581. </O>
  582. <P>
  583. <RULEREF NAME="clocktime_qualifier"/>
  584. </P>
  585. <P>
  586. <RULEREF NAME="clock_hour"/>
  587. </P>
  588. </P>
  589. </L>
  590. </RULE>
  591. <!--
  592. GRID_MINSEC
  593. Formed as a properly-formed number
  594. -->
  595. <RULE NAME="GRID_MINSEC" ID="GRID_MINSEC" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  596. <P>
  597. <RULEREF NAME="minutes" PROPNAME="ONES" PROPID="ONES"/>
  598. </P>
  599. </RULE>
  600. <!--
  601. GRID_CLOCK_MINSEC
  602. Formed as a properly-formed number
  603. -->
  604. <RULE NAME="GRID_CLOCK_MINSEC" ID="GRID_CLOCK_MINSEC" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  605. <P>
  606. <RULEREF NAME="clock_minutes" PROPNAME="ONES" PROPID="ONES"/>
  607. </P>
  608. </RULE>
  609. <!--
  610. GRID_STATEZIP
  611. Names of US states and territories are ITNed only if followed by a zip code.
  612. -->
  613. <RULE NAME="GRID_STATEZIP" ID="GRID_STATEZIP" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
  614. <O>
  615. <RULEREF NAME="comma" PROPNAME="COMMA" PROPID="COMMA"/>
  616. </O>
  617. <L>
  618. <P>
  619. <P>
  620. <RULEREF NAME="us_state"/>
  621. </P>
  622. <P>
  623. <RULEREF NAME="GRID_ZIPCODE" PROPNAME="ZIPCODE" PROPID="ZIPCODE"/>
  624. </P>
  625. <O>
  626. <O>
  627. <RULEREF NAME="dash_slash"/>
  628. </O>
  629. <P>
  630. <RULEREF NAME="GRID_ZIP_PLUS_FOUR" PROPNAME="FOURDIGITS" PROPID="FOURDIGITS"/>
  631. </P>
  632. </O>
  633. </P>
  634. <P>
  635. <P>
  636. <RULEREF NAME="can_province"/>
  637. </P>
  638. <P>
  639. <RULEREF NAME="GRID_CAN_ZIPCODE" PROPNAME="ZIPCODE" PROPID="ZIPCODE"/>
  640. </P>
  641. </P>
  642. </L>
  643. </RULE>
  644. <!--
  645. GRID_ZIPCODE
  646. Five digits, evaluated as a GRID_DIGIT_NUMBER
  647. -->
  648. <RULE NAME="GRID_ZIPCODE" ID="GRID_ZIPCODE" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  649. <P MIN="5" MAX="5">
  650. <RULEREF NAME="digit"/>
  651. </P>
  652. </RULE>
  653. <!--
  654. GRID_CAN_ZIPCODE
  655. Alpha/Number/Alpha Number/Alpha/Number.
  656. Those wacky canooks
  657. -->
  658. <RULE NAME="GRID_CAN_ZIPCODE" ID="GRID_CAN_ZIPCODE" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  659. <P MIN="3" MAX="3">
  660. <P>
  661. <RULEREF NAME="alpha"/>
  662. </P>
  663. <P>
  664. <RULEREF NAME="digit"/>
  665. </P>
  666. </P>
  667. </RULE>
  668. <!--
  669. GRID_ZIP_PLUS_FOUR
  670. Four digits
  671. -->
  672. <RULE NAME="GRID_ZIP_PLUS_FOUR" ID="GRID_ZIP_PLUS_FOUR" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  673. <RULEREF NAME="four_digits"/>
  674. </RULE>
  675. <!--
  676. GRID_DEGREES
  677. Number and then the word "degree(s)"
  678. Uses context to figure out what kind of degrees:
  679. * Temperature: Fahrenheit or Celsius
  680. * Angle measurement: optional minutes or seconds
  681. * Directions: followed by NESW
  682. -->
  683. <RULE NAME="GRID_DEGREES" ID="GRID_DEGREES" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
  684. <L>
  685. <P>
  686. <P>
  687. <RULEREF NAME="number_all"/>
  688. </P>
  689. <P>
  690. <RULEREF NAME="degrees"/>
  691. </P>
  692. <O>
  693. <RULEREF NAME="temp_units"/>
  694. </O>
  695. </P>
  696. <P>
  697. <P>
  698. <RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="GRID_INTEGER_NONNEG" PROPID="GRID_INTEGER_NONNEG"/>
  699. </P>
  700. <P>
  701. <RULEREF NAME="degrees"/>
  702. </P>
  703. <O>
  704. <O>
  705. and
  706. </O>
  707. <P>
  708. <RULEREF NAME="GRID_MINSEC" PROPNAME="MINUTE" PROPID="MINUTE"/>
  709. </P>
  710. <L>
  711. <P>
  712. minutes
  713. </P>
  714. <P>
  715. minute
  716. </P>
  717. </L>
  718. </O>
  719. <O>
  720. <O>
  721. and
  722. </O>
  723. <P>
  724. <RULEREF NAME="GRID_MINSEC" PROPNAME="SECOND" PROPID="SECOND"/>
  725. </P>
  726. <L>
  727. <P>
  728. seconds
  729. </P>
  730. <P>
  731. second
  732. </P>
  733. </L>
  734. </O>
  735. <O>
  736. <RULEREF NAME="direction"/>
  737. </O>
  738. </P>
  739. </L>
  740. </RULE>
  741. <!--
  742. GRID_MEASUREMENT
  743. Any sort of number (NUMBER, FLOAT, or FRACTION) followed by a unit
  744. -->
  745. <RULE NAME="GRID_MEASUREMENT" ID="GRID_MEASUREMENT" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
  746. <L>
  747. <P>
  748. <RULEREF NAME="GRID_FP_NUMBER" PROPNAME="NUMBER" PROPID="NUMBER"/>
  749. </P>
  750. <P>
  751. <RULEREF NAME="GRID_INTEGER" PROPNAME="NUMBER" PROPID="NUMBER"/>
  752. </P>
  753. <P>
  754. <RULEREF NAME="GRID_FRACTION" PROPNAME="NUMBER" PROPID="NUMBER"/>
  755. </P>
  756. </L>
  757. <L>
  758. <P>
  759. <RULEREF NAME="units"/>
  760. </P>
  761. <P>
  762. <RULEREF NAME="commonunits"/>
  763. </P>
  764. </L>
  765. </RULE>
  766. <!-- <RULE NAME="COMMON_GRID_MEASUREMENT" ID="COMMON_GRID_MEASURMEMENT" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
  767. <L>
  768. <P>
  769. <RULEREF NAME="GRID_FP_NUMBER" PROPNAME="NUMBER" PROPID="NUMBER"/>
  770. </P>
  771. <P>
  772. <RULEREF NAME="GRID_INTEGER_20_MILLBILL" PROPNAME="NUMBER" PROPID="NUMBER"/>
  773. </P>
  774. <P>
  775. <RULEREF NAME="GRID_FRACTION" PROPNAME="NUMBER" PROPID="NUMBER"/>
  776. </P>
  777. </L>
  778. <P>
  779. <RULEREF NAME="commonunits"/>
  780. </P>
  781. </RULE>-->
  782. <!--
  783. CURRENCY
  784. Allows for dollars and optional cents, just cents, or a floating-point number
  785. of dollars.
  786. -->
  787. <RULE NAME="GRID_CURRENCY" ID="GRID_CURRENCY" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="1">
  788. <L>
  789. <P>
  790. <O>
  791. <RULEREF NAME="NEGATIVE" PROPNAME="NEGATIVE" PROPID="NEGATIVE"/>
  792. </O>
  793. <L>
  794. <P>
  795. <P>
  796. <RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="DOLLARS" PROPID="DOLLARS"/>
  797. </P>
  798. <P>
  799. <RULEREF NAME="currency_type"/>
  800. </P>
  801. <O>
  802. currency
  803. </O>
  804. <O>
  805. <O>
  806. and
  807. </O>
  808. <P>
  809. <RULEREF NAME="GRID_CENTS" PROPNAME="CENTS" PROPID="CENTS"/>
  810. </P>
  811. <O>
  812. <RULEREF NAME="currency_small_type"/>
  813. </O>
  814. </O>
  815. </P>
  816. <P>
  817. <P>
  818. <RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="DOLLARS" PROPID="DOLLARS"/>
  819. </P>
  820. <P>
  821. and
  822. </P>
  823. <P>
  824. <RULEREF NAME="GRID_CENTS" PROPNAME="CENTS" PROPID="CENTS"/>
  825. </P>
  826. <P>
  827. <RULEREF NAME="currency_small_type"/>
  828. </P>
  829. </P>
  830. <P>
  831. <P>
  832. <RULEREF NAME="GRID_INTEGER_MILLBILL" PROPNAME="DOLLARS" PROPID="DOLLARS"/>
  833. </P>
  834. <P>
  835. <RULEREF NAME="currency_type"/>
  836. </P>
  837. </P>
  838. </L>
  839. </P>
  840. <P>
  841. <P>
  842. <RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="CENTS" PROPID="CENTS"/>
  843. </P>
  844. <P>
  845. <RULEREF NAME="currency_small_type"/>
  846. </P>
  847. </P>
  848. <P>
  849. <P>
  850. <RULEREF NAME="GRID_FP_NUMBER" PROPNAME="DOLLARS" PROPID="DOLLARS"/>
  851. </P>
  852. <P>
  853. <RULEREF NAME="currency_type"/>
  854. </P>
  855. </P>
  856. <P>
  857. <P>
  858. <RULEREF NAME="GRID_FP_NUMBER_NONNEG" PROPNAME="CENTS" PROPID="CENTS"/>
  859. </P>
  860. <P>
  861. <RULEREF NAME="currency_small_type"/>
  862. </P>
  863. </P>
  864. </L>
  865. </RULE>
  866. <RULE NAME="GRID_CENTS" ID="GRID_CENTS" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
  867. <L>
  868. <P>
  869. <RULEREF NAME="digit"/>
  870. </P>
  871. <P>
  872. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  873. </P>
  874. </L>
  875. </RULE>
  876. <!-- ************************************************************************
  877. CARDINAL QUANTITIES
  878. ************************************************************************ -->
  879. <!--
  880. integer_base
  881. The rule referenced by the number rules above
  882. -->
  883. <RULE NAME="integer_base">
  884. <O>
  885. <RULEREF NAME="NEGATIVE" PROPNAME="NEGATIVE" PROPID="NEGATIVE"/>
  886. </O>
  887. <P>
  888. <RULEREF NAME="integer_base_nonneg"/>
  889. </P>
  890. </RULE>
  891. <!--
  892. integer_base_nonneg
  893. Same as above except nonnegative
  894. -->
  895. <RULE NAME="integer_base_nonneg">
  896. <L>
  897. <P>
  898. <RULEREF NAME="cardinal"/>
  899. </P>
  900. <P>
  901. <RULEREF NAME="GRID_DIGIT_NUMBER" PROPNAME="GRID_DIGIT_NUMBER" PROPID="GRID_DIGIT_NUMBER"/>
  902. </P>
  903. </L>
  904. </RULE>
  905. <!--
  906. cardinal
  907. A cardinal is defined here as a number in [0, 1e12), properly
  908. formed (not spoken digit by digit)
  909. -->
  910. <RULE NAME="cardinal">
  911. <L>
  912. <P>
  913. <L>
  914. <P>
  915. <RULEREF NAME="big_part"/>
  916. </P>
  917. </L>
  918. <O>
  919. <O>
  920. and
  921. </O>
  922. <P>
  923. <!-- cardinal_999 part optional if the big_part is present -->
  924. <RULEREF NAME="cardinal_999" PROPNAME="ONES" PROPID="ONES" VAL="1"/>
  925. </P>
  926. </O>
  927. </P>
  928. <P>
  929. <P>
  930. <RULEREF NAME="cardinal_99_nonzero" PROPNAME="HUNDREDS" PROPID="HUNDREDS" VAL="1"/>
  931. </P>
  932. <P>
  933. hundred
  934. </P>
  935. <O>
  936. <O>
  937. and
  938. </O>
  939. <P>
  940. <RULEREF NAME="cardinal_99_nonzero" PROPNAME="ONES" PROPID="ONES" VAL="1"/>
  941. </P>
  942. </O>
  943. </P>
  944. <P>
  945. <!-- cardinal_999 part mandatory if the big_part is not present.
  946. In this case, the cardinal_999 part must be at least 20 -->
  947. <RULEREF NAME="cardinal_999" PROPNAME="ONES" PROPID="ONES" VAL="1"/>
  948. </P>
  949. </L>
  950. </RULE>
  951. <!--
  952. big_part
  953. A big_part is the part of a spoken number that is divisible by 1000. It
  954. has to be in the range (-1e12, 1e12).
  955. -->
  956. <RULE NAME="big_part">
  957. <L>
  958. <P>
  959. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  960. <P> billion </P>
  961. <!-- billions are present, so millions and thousands are optional -->
  962. <O>
  963. <RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
  964. <P> million </P>
  965. </O>
  966. <O>
  967. <RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
  968. <P> thousand </P>
  969. </O>
  970. </P>
  971. <P>
  972. <RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
  973. <P> million </P>
  974. <!-- millions are present, so thousands are optional -->
  975. <O>
  976. <RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
  977. <P> thousand </P>
  978. </O>
  979. </P>
  980. <P>
  981. <!-- billions and millions not present, so thousands are mandatory -->
  982. <RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
  983. <P> thousand </P>
  984. </P>
  985. </L>
  986. </RULE>
  987. <!--
  988. cardinal_999
  989. This is defined as a number in [0,1000).
  990. -->
  991. <RULE NAME="cardinal_999">
  992. <L>
  993. <P PROPNAME="ZERO" PROPID="ZERO" VAL="0">
  994. zero
  995. </P>
  996. <P>
  997. <!-- A number between 1 and 19 -->
  998. <RULEREF NAME="onesfrag" PROPNAME="ONES" VAL="1"/>
  999. </P>
  1000. <P>
  1001. <!-- A "tens" number (20, 30,...) -->
  1002. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1003. <O>
  1004. <!-- Can be followed by a nonzero digit -->
  1005. <RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
  1006. </O>
  1007. </P>
  1008. <P>
  1009. <!-- A number at least 100 -->
  1010. <RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
  1011. <!-- optionally followed by tens and ones places -->
  1012. <O>
  1013. <L>
  1014. <P>
  1015. <!-- e.g. six hundred thirteen -->
  1016. <!-- Note that this case is not covered by the later case -->
  1017. <RULEREF NAME="onesfrag" PROPNAME="ONES" VAL="1"/>
  1018. </P>
  1019. <P>
  1020. <!-- e.g. six hundred thirty two -->
  1021. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1022. <O>
  1023. <!-- ones place optional -->
  1024. <RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
  1025. </O>
  1026. </P>
  1027. </L>
  1028. </O>
  1029. </P>
  1030. </L>
  1031. </RULE>
  1032. <RULE NAME="cardinal_20_999">
  1033. <L>
  1034. <P>
  1035. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1036. <O>
  1037. <RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
  1038. </O>
  1039. </P>
  1040. <P>
  1041. <RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
  1042. <O>
  1043. <L>
  1044. <P>
  1045. <RULEREF NAME="onesfrag" PROPNAME="ONES" VAL="1"/>
  1046. </P>
  1047. <P>
  1048. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1049. <O>
  1050. <RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
  1051. </O>
  1052. </P>
  1053. </L>
  1054. </O>
  1055. </P>
  1056. </L>
  1057. </RULE>
  1058. <!--
  1059. cardinal_99
  1060. Defined as any integer in [0,100)
  1061. -->
  1062. <RULE NAME="cardinal_99">
  1063. <L>
  1064. <P>
  1065. <RULEREF NAME="cardinal_99_nonzero"/>
  1066. </P>
  1067. <P>
  1068. <RULEREF NAME="zero"/>
  1069. </P>
  1070. </L>
  1071. </RULE>
  1072. <RULE NAME="cardinal_99_nonzero">
  1073. <L>
  1074. <P>
  1075. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1076. <O><RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/></O>
  1077. </P>
  1078. <P> <RULEREF NAME="onesfrag" PROPNAME="ONES" VAL="1"/> </P>
  1079. </L>
  1080. </RULE>
  1081. <RULE NAME="NEGATIVE">
  1082. <L>
  1083. <P>
  1084. negative
  1085. </P>
  1086. <P>
  1087. minus
  1088. </P>
  1089. </L>
  1090. </RULE>
  1091. <RULE NAME="twodigit">
  1092. <L>
  1093. <P>
  1094. <P>
  1095. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1096. </P>
  1097. <O>
  1098. <RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
  1099. </O>
  1100. </P>
  1101. <P>
  1102. <RULEREF NAME="onesfrag_teens" PROPNAME="ONES" VAL="1"/>
  1103. </P>
  1104. <P>
  1105. <L>
  1106. <P>
  1107. zero
  1108. </P>
  1109. <P>
  1110. oh
  1111. </P>
  1112. </L>
  1113. <P>
  1114. <RULEREF NAME="digit" PROPNAME="ONES" VAL="1"/>
  1115. </P>
  1116. </P>
  1117. </L>
  1118. </RULE>
  1119. <RULE NAME="hundredsfrag">
  1120. <L>
  1121. <L PROPNAME="HUNDREDS" PROPID="HUNDREDS">
  1122. <P VAL="1" VALSTR="1">a</P>
  1123. </L>
  1124. <P>
  1125. <RULEREF NAME="digit_nonzero"/>
  1126. </P>
  1127. </L>
  1128. <P>
  1129. hundred ?and
  1130. </P>
  1131. </RULE>
  1132. <RULE NAME="tensfrag">
  1133. <L PROPNAME="TENS" PROPID="TENS">
  1134. <P VAL="2" VALSTR="2">twenty</P>
  1135. <P VAL="3" VALSTR="3">thirty</P>
  1136. <P VAL="4" VALSTR="4">forty</P>
  1137. <P VAL="5" VALSTR="5">fifty</P>
  1138. <P VAL="6" VALSTR="6">sixty</P>
  1139. <P VAL="7" VALSTR="7">seventy</P>
  1140. <P VAL="8" VALSTR="8">eighty</P>
  1141. <P VAL="9" VALSTR="9">ninety</P>
  1142. </L>
  1143. </RULE>
  1144. <RULE NAME="onesfrag">
  1145. <L>
  1146. <P>
  1147. <RULEREF NAME="digit_nonzero"/>
  1148. </P>
  1149. <P>
  1150. <RULEREF NAME="onesfrag_teens"/>
  1151. </P>
  1152. </L>
  1153. </RULE>
  1154. <RULE NAME="onesfrag_teens">
  1155. <L PROPNAME="ONES" PROPID="ONES">
  1156. <P VAL="10" VALSTR="10">ten</P>
  1157. <P VAL="11" VALSTR="11">eleven</P>
  1158. <P VAL="12" VALSTR="12">twelve</P>
  1159. <P VAL="13" VALSTR="13">thirteen</P>
  1160. <P VAL="14" VALSTR="14">fourteen</P>
  1161. <P VAL="15" VALSTR="15">fifteen</P>
  1162. <P VAL="16" VALSTR="16">sixteen</P>
  1163. <P VAL="17" VALSTR="17">seventeen</P>
  1164. <P VAL="18" VALSTR="18">eighteen</P>
  1165. <P VAL="19" VALSTR="19">nineteen</P>
  1166. </L>
  1167. </RULE>
  1168. <RULE NAME="onesfrag_or_zero">
  1169. <L>
  1170. <P>
  1171. <RULEREF NAME="zero"/>
  1172. </P>
  1173. <P>
  1174. <RULEREF NAME="onesfrag"/>
  1175. </P>
  1176. </L>
  1177. </RULE>
  1178. <RULE NAME="digit_nonzero_or_one">
  1179. <L PROPNAME="DIGIT" PROPID="DIGIT">
  1180. <P VAL="2" VALSTR="2">two</P>
  1181. <P VAL="3" VALSTR="3">three</P>
  1182. <P VAL="4" VALSTR="4">four</P>
  1183. <P VAL="5" VALSTR="5">five</P>
  1184. <P VAL="6" VALSTR="6">six</P>
  1185. <P VAL="7" VALSTR="7">seven</P>
  1186. <P VAL="8" VALSTR="8">eight</P>
  1187. <P VAL="9" VALSTR="9">nine</P>
  1188. </L>
  1189. </RULE>
  1190. <RULE NAME="digit_nonzero">
  1191. <L>
  1192. <L PROPNAME="DIGIT" PROPID="DIGIT">
  1193. <P VAL="1" VALSTR="1">one</P>
  1194. </L>
  1195. <P>
  1196. <RULEREF NAME="digit_nonzero_or_one"/>
  1197. </P>
  1198. </L>
  1199. </RULE>
  1200. <RULE NAME="digit">
  1201. <L>
  1202. <L PROPNAME="DIGIT" PROPID="DIGIT">
  1203. <P VAL="0" VALSTR="0">zero</P>
  1204. <P VAL="0" VALSTR="0">oh</P>
  1205. </L>
  1206. <P>
  1207. <RULEREF NAME="digit_nonzero"/>
  1208. </P>
  1209. </L>
  1210. </RULE>
  1211. <RULE NAME="zero">
  1212. <L PROPNAME="ONES" PROPID="ONES">
  1213. <P VAL="0" VALSTR="0">zero</P>
  1214. </L>
  1215. </RULE>
  1216. <!-- ************************************************************************
  1217. ORDINAL QUANTITIES
  1218. ************************************************************************ -->
  1219. <!--
  1220. big_part_ord
  1221. This is when the ordinal number ends in something divisible by 100, so
  1222. the last word will be either "billionth", "millionth", "thousandth", or
  1223. "hundredth"
  1224. -->
  1225. <RULE NAME="big_part_ord">
  1226. <L>
  1227. <P>
  1228. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  1229. <P>
  1230. billionth
  1231. </P>
  1232. </P>
  1233. <P>
  1234. <O>
  1235. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  1236. <P>
  1237. billion
  1238. </P>
  1239. </O>
  1240. <RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
  1241. <P>
  1242. millionth
  1243. </P>
  1244. </P>
  1245. <P>
  1246. <O>
  1247. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  1248. <P>
  1249. billion
  1250. </P>
  1251. </O>
  1252. <O>
  1253. <RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
  1254. <P>
  1255. million
  1256. </P>
  1257. </O>
  1258. <RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
  1259. <P>
  1260. thousandth
  1261. </P>
  1262. </P>
  1263. <P>
  1264. <O>
  1265. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  1266. <P>
  1267. billion
  1268. </P>
  1269. </O>
  1270. <O>
  1271. <RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
  1272. <P>
  1273. million
  1274. </P>
  1275. </O>
  1276. <O>
  1277. <RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
  1278. <P>
  1279. thousand
  1280. </P>
  1281. </O>
  1282. <RULEREF NAME="cardinal_99_nonzero" PROPNAME="HUNDREDS" PROPID="HUNDREDS"/>
  1283. <P>
  1284. hundredth
  1285. </P>
  1286. </P>
  1287. </L>
  1288. </RULE>
  1289. <!--
  1290. ordinal_999
  1291. This is an ordinal number between "zeroth" and "nine hundred ninety ninth"
  1292. -->
  1293. <RULE NAME="ordinal_999">
  1294. <L>
  1295. <P PROPNAME="ZERO" PROPID="ZERO" VAL="0">
  1296. zeroth
  1297. </P>
  1298. <P>
  1299. <!-- A number between 1st and 19th, or 20th, 30th, ...90th -->
  1300. <RULEREF NAME="onesfrag_ord" PROPNAME="ONES" VAL="1"/>
  1301. </P>
  1302. <P>
  1303. <!-- Something like "thirty ninth". Note that "thirtieth" would be covered above -->
  1304. <P>
  1305. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1306. </P>
  1307. <P>
  1308. <RULEREF NAME="digit_nonzero_ord" PROPNAME="ONES" VAL="1"/>
  1309. </P>
  1310. </P>
  1311. <P>
  1312. <P>
  1313. <RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
  1314. </P>
  1315. <!-- Followed by either a one-word ordinal ("twelfth") or a two-word
  1316. ordinal ("thirty ninth") -->
  1317. <L>
  1318. <P>
  1319. <RULEREF NAME="onesfrag_ord" PROPNAME="ONES" VAL="1"/>
  1320. </P>
  1321. <P>
  1322. <P>
  1323. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1324. </P>
  1325. <P>
  1326. <RULEREF NAME="digit_nonzero_ord" PROPNAME="ONES" VAL="1"/>
  1327. </P>
  1328. </P>
  1329. </L>
  1330. </P>
  1331. </L>
  1332. </RULE>
  1333. <!--
  1334. onesfrag_ord
  1335. These are the words with which an ordinal number less than 1000
  1336. could end
  1337. -->
  1338. <RULE NAME="onesfrag_ord">
  1339. <L PROPNAME="ONES" PROPID="ONES">
  1340. <!--<P VAL="0">zero</P>-->
  1341. <P VAL="1">first</P>
  1342. <P VAL="2">second</P>
  1343. <P VAL="3">third</P>
  1344. <P VAL="4">fourth</P>
  1345. <P VAL="5">fifth</P>
  1346. <P VAL="6">sixth</P>
  1347. <P VAL="7">seventh</P>
  1348. <P VAL="8">eighth</P>
  1349. <P VAL="9">ninth</P>
  1350. <P VAL="10">tenth</P>
  1351. <P VAL="11">eleventh</P>
  1352. <P VAL="12">twelfth</P>
  1353. <P VAL="13">thirteenth</P>
  1354. <P VAL="14">fourteenth</P>
  1355. <P VAL="15">fifteenth</P>
  1356. <P VAL="16">sixteenth</P>
  1357. <P VAL="17">seventeenth</P>
  1358. <P VAL="18">eighteenth</P>
  1359. <P VAL="19">nineteenth</P>
  1360. <P VAL="20">twentieth</P>
  1361. <P VAL="30">thirtieth</P>
  1362. <P VAL="40">fortieth</P>
  1363. <P VAL="50">fiftieth</P>
  1364. <P VAL="60">sixtieth</P>
  1365. <P VAL="70">seventieth</P>
  1366. <P VAL="80">eightieth</P>
  1367. <P VAL="90">ninetieth</P>
  1368. </L>
  1369. </RULE>
  1370. <RULE NAME="digit_nonzero_ord">
  1371. <L PROPNAME="DIGIT" PROPID="DIGIT">
  1372. <P VAL="1">first</P>
  1373. <P VAL="2">second</P>
  1374. <P VAL="3">third</P>
  1375. <P VAL="4">fourth</P>
  1376. <P VAL="5">fifth</P>
  1377. <P VAL="6">sixth</P>
  1378. <P VAL="7">seventh</P>
  1379. <P VAL="8">eighth</P>
  1380. <P VAL="9">ninth</P>
  1381. </L>
  1382. </RULE>
  1383. <!-- ************************************************************************
  1384. DENOMINATOR QUANTITIES
  1385. ************************************************************************ -->
  1386. <!--
  1387. big_part_ord_den
  1388. Almost exactly the same as big_part_ord, except the ordinal part is plural.
  1389. -->
  1390. <RULE NAME="big_part_ord_den">
  1391. <L>
  1392. <P>
  1393. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  1394. <P>
  1395. billionths
  1396. </P>
  1397. </P>
  1398. <P>
  1399. <O>
  1400. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  1401. <P>
  1402. billion
  1403. </P>
  1404. </O>
  1405. <RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
  1406. <P>
  1407. millionths
  1408. </P>
  1409. </P>
  1410. <P>
  1411. <O>
  1412. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  1413. <P>
  1414. billion
  1415. </P>
  1416. </O>
  1417. <O>
  1418. <RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
  1419. <P>
  1420. million
  1421. </P>
  1422. </O>
  1423. <P>
  1424. <RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
  1425. <P>
  1426. thousandths
  1427. </P>
  1428. </P>
  1429. </P>
  1430. <P>
  1431. <O>
  1432. <RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
  1433. <P>
  1434. billion
  1435. </P>
  1436. </O>
  1437. <O>
  1438. <RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
  1439. <P>
  1440. million
  1441. </P>
  1442. </O>
  1443. <O>
  1444. <RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="MILLIONS"/>
  1445. <P>
  1446. thousand
  1447. </P>
  1448. </O>
  1449. <P>
  1450. <RULEREF NAME="cardinal_99_nonzero" PROPNAME="HUNDREDS" PROPID="HUNDREDS"/>
  1451. <P>
  1452. hundredths
  1453. </P>
  1454. </P>
  1455. </P>
  1456. </L>
  1457. </RULE>
  1458. <!--
  1459. ordinal_999_den
  1460. Same as ordinal_999, except plural, and no zeroths.
  1461. -->
  1462. <RULE NAME="ordinal_999_den">
  1463. <L>
  1464. <P>
  1465. <!-- A number between 1st and 19th, or 20th, 30th, ...90th -->
  1466. <RULEREF NAME="onesfrag_ord_den_or_half_quarter" PROPNAME="ONES" VAL="1"/>
  1467. </P>
  1468. <P>
  1469. <!-- Something like "thirty ninth". Note that "thirtieth" would be covered above -->
  1470. <P>
  1471. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1472. </P>
  1473. <P>
  1474. <RULEREF NAME="digit_nonzero_ord_den" PROPNAME="ONES" VAL="1"/>
  1475. </P>
  1476. </P>
  1477. <P>
  1478. <P>
  1479. <RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
  1480. </P>
  1481. <!-- Followed by either a one-word ordinal ("twelfth") or a two-word
  1482. ordinal ("thirty ninth") -->
  1483. <L>
  1484. <P>
  1485. <RULEREF NAME="onesfrag_ord_den" PROPNAME="ONES" VAL="1"/>
  1486. </P>
  1487. <P>
  1488. <P>
  1489. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1490. </P>
  1491. <P>
  1492. <RULEREF NAME="digit_nonzero_ord_den" PROPNAME="ONES" VAL="1"/>
  1493. </P>
  1494. </P>
  1495. </L>
  1496. </P>
  1497. </L>
  1498. </RULE>
  1499. <!--
  1500. ordinal_999_den_singular
  1501. Same as ordinal_999_den, except all endings must be singular
  1502. -->
  1503. <RULE NAME="ordinal_999_den_singular">
  1504. <L>
  1505. <P>
  1506. <!-- A number between 1st and 19th, or 20th, 30th, ...90th -->
  1507. <RULEREF NAME="onesfrag_ord_den_singular_or_half_quarter" PROPNAME="ONES" VAL="1"/>
  1508. </P>
  1509. <P>
  1510. <!-- Something like "thirty ninth". Note that "thirtieth" would be covered above -->
  1511. <P>
  1512. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1513. </P>
  1514. <P>
  1515. <RULEREF NAME="digit_nonzero_ord_den_singular" PROPNAME="ONES" VAL="1"/>
  1516. </P>
  1517. </P>
  1518. <P>
  1519. <P>
  1520. <RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
  1521. </P>
  1522. <!-- Followed by either a one-word ordinal ("twelfth") or a two-word
  1523. ordinal ("thirty ninth") -->
  1524. <L>
  1525. <P>
  1526. <RULEREF NAME="onesfrag_ord_den_singular" PROPNAME="ONES" VAL="1"/>
  1527. </P>
  1528. <P>
  1529. <P>
  1530. <RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
  1531. </P>
  1532. <P>
  1533. <RULEREF NAME="digit_nonzero_ord_den_singular" PROPNAME="ONES" VAL="1"/>
  1534. </P>
  1535. </P>
  1536. </L>
  1537. </P>
  1538. </L>
  1539. </RULE>
  1540. <!--
  1541. onesfrag_ord_den
  1542. Same as onesfrag_ord except plural.
  1543. -->
  1544. <RULE NAME="onesfrag_ord_den">
  1545. <L>
  1546. <P>
  1547. <L PROPNAME="ONES" PROPID="ONES">
  1548. <P VAL="3">thirds</P>
  1549. <P VAL="4">fourths</P>
  1550. <P VAL="5">fifths</P>
  1551. <P VAL="6">sixths</P>
  1552. <P VAL="7">sevenths</P>
  1553. <P VAL="8">eighths</P>
  1554. <P VAL="9">ninths</P>
  1555. <P VAL="10">tenths</P>
  1556. <P VAL="11">elevenths</P>
  1557. <P VAL="12">twelfths</P>
  1558. <P VAL="13">thirteenths</P>
  1559. <P VAL="14">fourteenths</P>
  1560. <P VAL="15">fifteenths</P>
  1561. <P VAL="16">sixteenths</P>
  1562. <P VAL="17">seventeenths</P>
  1563. <P VAL="18">eighteenths</P>
  1564. <P VAL="19">nineteenths</P>
  1565. <P VAL="20">twentieths</P>
  1566. <P VAL="30">thirtieths</P>
  1567. <P VAL="40">fortieths</P>
  1568. <P VAL="50">fiftieths</P>
  1569. <P VAL="60">sixtieths</P>
  1570. <P VAL="70">seventieths</P>
  1571. <P VAL="80">eightieths</P>
  1572. <P VAL="90">ninetieths</P>
  1573. </L>
  1574. </P>
  1575. </L>
  1576. </RULE>
  1577. <RULE NAME="onesfrag_ord_den_or_half_quarter">
  1578. <L>
  1579. <P>
  1580. <RULEREF NAME="onesfrag_ord_den"/>
  1581. </P>
  1582. <P>
  1583. <L PROPNAME="ONES" PROPID="ONES">
  1584. <P VAL="2">half</P>
  1585. <P VAL="4">quarter</P>
  1586. <P VAL="2">halves</P>
  1587. <P VAL="4">quarters</P>
  1588. </L>
  1589. </P>
  1590. </L>
  1591. </RULE>
  1592. <!--
  1593. onesfrag_ord_den_singular
  1594. Same as onesfrag_ord_den except singular.
  1595. -->
  1596. <RULE NAME="onesfrag_ord_den_singular">
  1597. <L>
  1598. <P>
  1599. <L PROPNAME="ONES" PROPID="ONES">
  1600. <P VAL="2">half</P>
  1601. <P VAL="3">third</P>
  1602. <P VAL="4">fourth</P>
  1603. <P VAL="5">fifth</P>
  1604. <P VAL="6">sixth</P>
  1605. <P VAL="7">seventh</P>
  1606. <P VAL="8">eighth</P>
  1607. <P VAL="9">ninth</P>
  1608. <P VAL="10">tenth</P>
  1609. <P VAL="11">eleventh</P>
  1610. <P VAL="12">twelfth</P>
  1611. <P VAL="13">thirteenth</P>
  1612. <P VAL="14">fourteenth</P>
  1613. <P VAL="15">fifteenth</P>
  1614. <P VAL="16">sixteenth</P>
  1615. <P VAL="17">seventeenth</P>
  1616. <P VAL="18">eighteenth</P>
  1617. <P VAL="19">nineteenth</P>
  1618. <P VAL="20">twentieth</P>
  1619. <P VAL="30">thirtieth</P>
  1620. <P VAL="40">fortieth</P>
  1621. <P VAL="50">fiftieth</P>
  1622. <P VAL="60">sixtieth</P>
  1623. <P VAL="70">seventieth</P>
  1624. <P VAL="80">eightieth</P>
  1625. <P VAL="90">ninetieth</P>
  1626. </L>
  1627. </P>
  1628. </L>
  1629. </RULE>
  1630. <RULE NAME="onesfrag_ord_den_singular_or_half_quarter">
  1631. <L>
  1632. <P>
  1633. <RULEREF NAME="onesfrag_ord_den_singular"/>
  1634. </P>
  1635. <P>
  1636. <L PROPNAME="ONES" PROPID="ONES">
  1637. <P VAL="2">half</P>
  1638. <P VAL="4">quarter</P>
  1639. </L>
  1640. </P>
  1641. </L>
  1642. </RULE>
  1643. <RULE NAME="digit_nonzero_ord_den">
  1644. <L>
  1645. <P>
  1646. <L PROPNAME="DIGIT" PROPID="DIGIT">
  1647. <P VAL="1">firsts</P>
  1648. <P VAL="2">seconds</P>
  1649. <P VAL="3">thirds</P>
  1650. <P VAL="4">fourths</P>
  1651. <P VAL="4">quarters</P>
  1652. <P VAL="5">fifths</P>
  1653. <P VAL="6">sixths</P>
  1654. <P VAL="7">sevenths</P>
  1655. <P VAL="8">eighths</P>
  1656. <P VAL="9">ninths</P>
  1657. </L>
  1658. </P>
  1659. </L>
  1660. </RULE>
  1661. <RULE NAME="digit_nonzero_ord_den_singular">
  1662. <L>
  1663. <P>
  1664. <L PROPNAME="DIGIT" PROPID="DIGIT">
  1665. <P VAL="1">first</P>
  1666. <P VAL="2">second</P>
  1667. <P VAL="3">third</P>
  1668. <P VAL="4">fourth</P>
  1669. <P VAL="5">fifth</P>
  1670. <P VAL="6">sixth</P>
  1671. <P VAL="7">seventh</P>
  1672. <P VAL="8">eighth</P>
  1673. <P VAL="9">ninth</P>
  1674. </L>
  1675. </P>
  1676. </L>
  1677. </RULE>
  1678. <!-- ************************************************************************
  1679. FLOATING-POINT NUMBER QUANTITIES
  1680. ************************************************************************ -->
  1681. <!--
  1682. fp_number_nonneg
  1683. Floating-point numbers with up to 12 sig figs. Both the stuff to the left of the
  1684. decimal point and the stuff to the right of the decimal point can be either
  1685. NUMBERs or DIGIT_NUMBERs
  1686. -->
  1687. <RULE NAME="fp_number_nonneg">
  1688. <O>
  1689. <L>
  1690. <P>
  1691. <RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="ONES" PROPID="ONES"/>
  1692. </P>
  1693. <P PROPNAME="ZERO" PROPID="ZERO" VAL="0">
  1694. oh
  1695. </P>
  1696. </L>
  1697. </O>
  1698. <L>
  1699. <P>
  1700. point
  1701. </P>
  1702. <P>
  1703. decimal
  1704. </P>
  1705. </L>
  1706. <L>
  1707. <P>
  1708. <RULEREF NAME="GRID_DIGIT_NUMBER" PROPNAME="FP_PART" PROPID="FP_PART"/>
  1709. </P>
  1710. <P>
  1711. <RULEREF NAME="GRID_INTEGER_999" PROPNAME="FP_PART" PROPID="FP_PART"/>
  1712. </P>
  1713. <P PROPNAME="POINT_ZERO" PROPID="POINT_ZERO" VAL="0">
  1714. oh
  1715. </P>
  1716. </L>
  1717. </RULE>
  1718. <!-- ************************************************************************
  1719. DATE QUANTITIES
  1720. ************************************************************************ -->
  1721. <RULE NAME="day_of_week">
  1722. <L PROPNAME="DAY_OF_WEEK" PROPID="DAY_OF_WEEK">
  1723. <P VAL="1">Monday</P>
  1724. <P VAL="2">Tuesday</P>
  1725. <P VAL="3">Wednesday</P>
  1726. <P VAL="4">Thursday</P>
  1727. <P VAL="5">Friday</P>
  1728. <P VAL="6">Saturday</P>
  1729. <P VAL="7">Sunday</P>
  1730. </L>
  1731. </RULE>
  1732. <RULE NAME="month">
  1733. <L>
  1734. <P>
  1735. <RULEREF NAME="month_capital_necessary"/>
  1736. </P>
  1737. <P>
  1738. <L PROPNAME="MONTH" PROPID="MONTH">
  1739. <P VAL="3">march</P>
  1740. <P VAL="5">may</P>
  1741. </L>
  1742. </P>
  1743. </L>
  1744. </RULE>
  1745. <RULE NAME="month_capital_necessary">
  1746. <L PROPNAME="MONTH" PROPID="MONTH">
  1747. <P VAL="1">January</P>
  1748. <P VAL="2">February</P>
  1749. <P VAL="3">March</P>
  1750. <P VAL="4">April</P>
  1751. <P VAL="5">May</P>
  1752. <P VAL="6">June</P>
  1753. <P VAL="7">July</P>
  1754. <P VAL="8">August</P>
  1755. <P VAL="9">September</P>
  1756. <P VAL="10">October</P>
  1757. <P VAL="11">November</P>
  1758. <P VAL="12">December</P>
  1759. </L>
  1760. </RULE>
  1761. <RULE NAME="day_of_month">
  1762. <L PROPNAME="DAY_OF_MONTH" PROPID="DAY_OF_MONTH">
  1763. <P VAL="1">one</P>
  1764. <P VAL="1">first</P>
  1765. <P VAL="2">two</P>
  1766. <P VAL="2">second</P>
  1767. <P VAL="3">three</P>
  1768. <P VAL="3">third</P>
  1769. <P VAL="4">four</P>
  1770. <P VAL="4">fourth</P>
  1771. <P VAL="5">five</P>
  1772. <P VAL="5">fifth</P>
  1773. <P VAL="6">six</P>
  1774. <P VAL="6">sixth</P>
  1775. <P VAL="7">seven</P>
  1776. <P VAL="7">seventh</P>
  1777. <P VAL="8">eight</P>
  1778. <P VAL="8">eighth</P>
  1779. <P VAL="9">nine</P>
  1780. <P VAL="9">ninth</P>
  1781. <P VAL="10">ten</P>
  1782. <P VAL="10">tenth</P>
  1783. <P VAL="11">eleven</P>
  1784. <P VAL="11">eleventh</P>
  1785. <P VAL="12">twelve</P>
  1786. <P VAL="12">twelfth</P>
  1787. <P VAL="13">thirteen</P>
  1788. <P VAL="13">thirteenth</P>
  1789. <P VAL="14">fourteen</P>
  1790. <P VAL="14">fourteenth</P>
  1791. <P VAL="15">fifteen</P>
  1792. <P VAL="15">fifteenth</P>
  1793. <P VAL="16">sixteen</P>
  1794. <P VAL="16">sixteenth</P>
  1795. <P VAL="17">seventeen</P>
  1796. <P VAL="17">seventeenth</P>
  1797. <P VAL="18">eighteen</P>
  1798. <P VAL="18">eighteenth</P>
  1799. <P VAL="19">nineteen</P>
  1800. <P VAL="19">nineteenth</P>
  1801. <P VAL="20">twenty</P>
  1802. <P VAL="20">twentieth</P>
  1803. <P VAL="21">twenty one</P>
  1804. <P VAL="21">twenty first</P>
  1805. <P VAL="22">twenty two</P>
  1806. <P VAL="22">twenty second</P>
  1807. <P VAL="23">twenty three</P>
  1808. <P VAL="23">twenty third</P>
  1809. <P VAL="24">twenty four</P>
  1810. <P VAL="24">twenty fourth</P>
  1811. <P VAL="25">twenty five</P>
  1812. <P VAL="25">twenty fifth</P>
  1813. <P VAL="26">twenty six</P>
  1814. <P VAL="26">twenty sixth</P>
  1815. <P VAL="27">twenty seven</P>
  1816. <P VAL="27">twenty seventh</P>
  1817. <P VAL="28">twenty eight</P>
  1818. <P VAL="28">twenty eighth</P>
  1819. <P VAL="29">twenty nine</P>
  1820. <P VAL="29">twenty ninth</P>
  1821. <P VAL="30">thirty</P>
  1822. <P VAL="30">thirtieth</P>
  1823. <P VAL="31">thirty one</P>
  1824. <P VAL="31">thirty first</P>
  1825. </L>
  1826. </RULE>
  1827. <RULE NAME="year">
  1828. <L>
  1829. <P>
  1830. <!-- stuff like "two thousand one" -->
  1831. <RULEREF NAME="GRID_INTEGER"/>
  1832. </P>
  1833. <P>
  1834. <!-- stuff like "nineteen seventy seven" -->
  1835. <RULEREF NAME="GRID_DIGIT_NUMBER"/>
  1836. </P>
  1837. </L>
  1838. </RULE>
  1839. <RULE NAME="month_year">
  1840. <P>
  1841. <RULEREF NAME="month"/>
  1842. </P>
  1843. <P>
  1844. <RULEREF NAME="GRID_YEAR" PROPNAME="YEAR" PROPID="YEAR"/>
  1845. </P>
  1846. </RULE>
  1847. <RULE NAME="year_month">
  1848. <P>
  1849. <RULEREF NAME="GRID_YEAR" PROPNAME="YEAR" PROPID="YEAR"/>
  1850. </P>
  1851. <P>
  1852. <RULEREF NAME="month_capital_necessary"/>
  1853. </P>
  1854. </RULE>
  1855. <RULE NAME="date_hundreds">
  1856. <P>
  1857. <RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
  1858. </P>
  1859. <P>
  1860. hundred
  1861. </P>
  1862. </RULE>
  1863. <!-- ************************************************************************
  1864. TIME QUANTITIES
  1865. ************************************************************************ -->
  1866. <RULE NAME="clock_hour">
  1867. <L PROPNAME="HOUR_CLOCK" PROPID="HOUR_CLOCK">
  1868. <P VAL="1">one</P>
  1869. <P VAL="2">two</P>
  1870. <P VAL="3">three</P>
  1871. <P VAL="4">four</P>
  1872. <P VAL="5">five</P>
  1873. <P VAL="6">six</P>
  1874. <P VAL="7">seven</P>
  1875. <P VAL="8">eight</P>
  1876. <P VAL="9">nine</P>
  1877. <P VAL="10">ten</P>
  1878. <P VAL="11">eleven</P>
  1879. <P VAL="12">twelve</P>
  1880. </L>
  1881. </RULE>
  1882. <RULE NAME="clocktime_qualifier">
  1883. <L PROPNAME="CLOCKTIME_QUALIFIER" PROPID="CLOCKTIME_QUALIFIER">
  1884. <P VAL="QUARTER_TO">quarter to</P>
  1885. <P VAL="QUARTER_TO">quarter til</P>
  1886. <P VAL="QUARTER_PAST">quarter past</P>
  1887. <P VAL="QUARTER_PAST">quarter after</P>
  1888. <P VAL="HALF_PAST">half past</P>
  1889. </L>
  1890. </RULE>
  1891. <RULE NAME="minutes">
  1892. <P PROPNAME="ONES" PROPID="ONES">
  1893. <L>
  1894. <P>
  1895. <P>
  1896. <RULEREF NAME="onesfrag_or_zero" PROPNAME="ONES" VAL="1"/>
  1897. </P>
  1898. </P>
  1899. <P>
  1900. <RULEREF NAME="clock_minutes"/>
  1901. </P>
  1902. </L>
  1903. </P>
  1904. </RULE>
  1905. <RULE NAME="clock_minutes">
  1906. <L>
  1907. <P>
  1908. <L>
  1909. <P>
  1910. oh
  1911. </P>
  1912. <P>
  1913. zero
  1914. </P>
  1915. </L>
  1916. <P>
  1917. <RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
  1918. </P>
  1919. </P>
  1920. <P>
  1921. <RULEREF NAME="onesfrag_teens" PROPNAME="ONES" VAL="1"/>
  1922. </P>
  1923. <P>
  1924. <P>
  1925. <RULEREF NAME="tensfrag_minutes" PROPNAME="TENS" PROPID="TENS" VAL="10"/>
  1926. </P>
  1927. <O>
  1928. <RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
  1929. </O>
  1930. </P>
  1931. </L>
  1932. </RULE>
  1933. <RULE NAME="tensfrag_minutes">
  1934. <L PROPNAME="TENS" PROPID="TENS">
  1935. <P VAL="2">twenty</P>
  1936. <P VAL="3">thirty</P>
  1937. <P VAL="4">forty</P>
  1938. <P VAL="5">fifty</P>
  1939. </L>
  1940. </RULE>
  1941. <RULE NAME="am_pm">
  1942. <L PROPNAME="AMPM" PROPID="AMPM">
  1943. <P VAL="AM">AM</P>
  1944. <P VAL="PM">PM</P>
  1945. </L>
  1946. <!--
  1947. <P PROPNAME="AM" PROPID="AM">
  1948. A.M.
  1949. </P>
  1950. <P PROPNAME="PM" PROPID="PM">
  1951. P.M.
  1952. </P>
  1953. </L>
  1954. -->
  1955. </RULE>
  1956. <!-- ************************************************************************
  1957. STATEZIP QUANTITIES
  1958. ************************************************************************ -->
  1959. <RULE NAME="us_state">
  1960. <L PROPNAME="US_STATE" PROPID="US_STATE">
  1961. <P VAL="0" VALSTR="AL">Alabama</P>
  1962. <P VAL="1" VALSTR="AK">Alaska</P>
  1963. <P VAL="2" VALSTR="AS">American Samoa</P>
  1964. <P VAL="3" VALSTR="AZ">Arizona</P>
  1965. <P VAL="4" VALSTR="AR">Arkansas</P>
  1966. <P VAL="5" VALSTR="CA">California</P>
  1967. <P VAL="6" VALSTR="CO">Colorado</P>
  1968. <P VAL="7" VALSTR="CT">Connecticut</P>
  1969. <P VAL="8" VALSTR="DE">Delaware</P>
  1970. <P VAL="9" VALSTR="DC">District of Columbia</P>
  1971. <P VAL="9" VALSTR="DC">DC</P>
  1972. <P VAL="10" VALSTR="FM">Federated States of Micronesia</P>
  1973. <P VAL="11" VALSTR="FL">Florida</P>
  1974. <P VAL="12" VALSTR="GA">Georgia</P>
  1975. <P VAL="13" VALSTR="GU">Guam</P>
  1976. <P VAL="14" VALSTR="HI">Hawaii</P>
  1977. <P VAL="15" VALSTR="ID">Idaho</P>
  1978. <P VAL="16" VALSTR="IL">Illinois</P>
  1979. <P VAL="17" VALSTR="IN">Indiana</P>
  1980. <P VAL="18" VALSTR="IA">Iowa</P>
  1981. <P VAL="19" VALSTR="KS">Kansas</P>
  1982. <P VAL="20" VALSTR="KY">Kentucky</P>
  1983. <P VAL="21" VALSTR="LA">Louisiana</P>
  1984. <P VAL="22" VALSTR="ME">Maine</P>
  1985. <P VAL="23" VALSTR="MH">Marshall Islands</P>
  1986. <P VAL="24" VALSTR="MD">Maryland</P>
  1987. <P VAL="25" VALSTR="MA">Massachusetts</P>
  1988. <P VAL="26" VALSTR="MI">Michigan</P>
  1989. <P VAL="27" VALSTR="MN">Minnesota</P>
  1990. <P VAL="28" VALSTR="MS">Mississippi</P>
  1991. <P VAL="29" VALSTR="MO">Missouri</P>
  1992. <P VAL="30" VALSTR="MT">Montana</P>
  1993. <P VAL="31" VALSTR="NE">Nebraska</P>
  1994. <P VAL="32" VALSTR="NV">Nevada</P>
  1995. <P VAL="33" VALSTR="NH">New Hampshire</P>
  1996. <P VAL="34" VALSTR="NJ">New Jersey</P>
  1997. <P VAL="35" VALSTR="NM">New Mexico</P>
  1998. <P VAL="36" VALSTR="NY">New York</P>
  1999. <P VAL="37" VALSTR="NC">North Carolina</P>
  2000. <P VAL="38" VALSTR="ND">North Dakota</P>
  2001. <P VAL="39" VALSTR="MP">Northern Mariana Island</P>
  2002. <P VAL="40" VALSTR="OH">Ohio</P>
  2003. <P VAL="41" VALSTR="OK">Oklahoma</P>
  2004. <P VAL="42" VALSTR="OR">Oregon</P>
  2005. <P VAL="43" VALSTR="PA">Pennsylvania</P>
  2006. <P VAL="44" VALSTR="PR">Puerto Rico</P>
  2007. <P VAL="45" VALSTR="RI">Rhode Island</P>
  2008. <P VAL="46" VALSTR="SC">South Carolina</P>
  2009. <P VAL="47" VALSTR="SD">South Dakota</P>
  2010. <P VAL="48" VALSTR="TX">Texas</P>
  2011. <P VAL="49" VALSTR="UT">Utah</P>
  2012. <P VAL="50" VALSTR="VT">Vermont</P>
  2013. <P VAL="51" VALSTR="VA">Virginia</P>
  2014. <P VAL="52" VALSTR="VI">Virgin Islands</P>
  2015. <P VAL="53" VALSTR="WA">Washington</P>
  2016. <P VAL="54" VALSTR="WV">West Virginia</P>
  2017. <P VAL="55" VALSTR="WI">Wisconsin</P>
  2018. <P VAL="56" VALSTR="WY">Wyoming</P>
  2019. </L>
  2020. </RULE>
  2021. <RULE NAME="can_province">
  2022. <L PROPNAME="CAN_PROVINCE" PROPID="CAN_PROVINCE">
  2023. <P VAL="0" VALSTR="AL">Alberta</P>
  2024. <P VAL="1" VALSTR="BC">British Columbia</P>
  2025. <P VAL="2" VALSTR="MB">Manitoba</P>
  2026. <P VAL="3" VALSTR="NB">new Brunswick</P>
  2027. <P VAL="3" VALSTR="NB">New Brunswick</P>
  2028. <P VAL="4" VALSTR="NF">Newfoundland and Labrador</P>
  2029. <P VAL="4" VALSTR="NF">Newfoundland</P>
  2030. <P VAL="4" VALSTR="NF">Labrador</P>
  2031. <P VAL="5" VALSTR="NT">Northwest Territories</P>
  2032. <P VAL="5" VALSTR="NT">northwest territories</P>
  2033. <P VAL="6" VALSTR="ON">Ontario</P>
  2034. <P VAL="7" VALSTR="PE">Prince Edward Island</P>
  2035. <P VAL="7" VALSTR="PE">Prince Edward island</P>
  2036. <P VAL="8" VALSTR="PQ">Quebec</P>
  2037. <P VAL="9" VALSTR="SK">Saskatchewan</P>
  2038. </L>
  2039. </RULE>
  2040. <RULE NAME="alpha">
  2041. <L PROPNAME="ALPHA" PROPID="ALPHA">
  2042. <P VAL="0" VALSTR="A">A.</P>
  2043. <P VAL="1" VALSTR="B">B.</P>
  2044. <P VAL="2" VALSTR="C">C.</P>
  2045. <P VAL="3" VALSTR="D">D.</P>
  2046. <P VAL="4" VALSTR="E">E.</P>
  2047. <P VAL="5" VALSTR="F">F.</P>
  2048. <P VAL="6" VALSTR="G">G.</P>
  2049. <P VAL="7" VALSTR="H">H.</P>
  2050. <P VAL="8" VALSTR="I">I.</P>
  2051. <P VAL="9" VALSTR="J">J.</P>
  2052. <P VAL="10" VALSTR="K">K.</P>
  2053. <P VAL="11" VALSTR="L">L.</P>
  2054. <P VAL="12" VALSTR="M">M.</P>
  2055. <P VAL="13" VALSTR="N">N.</P>
  2056. <P VAL="14" VALSTR="O">O.</P>
  2057. <P VAL="15" VALSTR="P">P.</P>
  2058. <P VAL="16" VALSTR="Q">Q.</P>
  2059. <P VAL="17" VALSTR="R">R.</P>
  2060. <P VAL="18" VALSTR="S">S.</P>
  2061. <P VAL="19" VALSTR="T">T.</P>
  2062. <P VAL="20" VALSTR="U">U.</P>
  2063. <P VAL="21" VALSTR="V">V.</P>
  2064. <P VAL="22" VALSTR="W">W.</P>
  2065. <P VAL="23" VALSTR="X">X.</P>
  2066. <P VAL="24" VALSTR="Y">Y.</P>
  2067. <P VAL="25" VALSTR="Z">Z.</P>
  2068. </L>
  2069. </RULE>
  2070. <RULE NAME="comma">
  2071. <L>
  2072. <P>
  2073. comma
  2074. </P>
  2075. <P>
  2076. ,
  2077. </P>
  2078. </L>
  2079. </RULE>
  2080. <!-- ************************************************************************
  2081. PHONE NUMBER QUANTITIES
  2082. ************************************************************************ -->
  2083. <!--
  2084. three_digits_phone
  2085. Area codes and exchanges never start with zero or one
  2086. -->
  2087. <RULE NAME="three_digits_phone">
  2088. <RULEREF NAME="digit_nonzero_or_one"/>
  2089. <P MIN="2" MAX="2">
  2090. <RULEREF NAME="digit"/>
  2091. </P>
  2092. </RULE>
  2093. <RULE NAME="four_digits">
  2094. <P MIN="4" MAX="4">
  2095. <RULEREF NAME="digit"/>
  2096. </P>
  2097. </RULE>
  2098. <RULE NAME="dash_slash">
  2099. <L>
  2100. <P>
  2101. -
  2102. </P>
  2103. <P>
  2104. dash
  2105. </P>
  2106. <P>
  2107. slash
  2108. </P>
  2109. </L>
  2110. </RULE>
  2111. <RULE NAME="one_plus">
  2112. <P>
  2113. one
  2114. </P>
  2115. <O>
  2116. <RULEREF NAME="dash_slash"/>
  2117. </O>
  2118. </RULE>
  2119. <RULE NAME="area_code">
  2120. <L>
  2121. <P>
  2122. <RULEREF NAME="three_digits_phone"/>
  2123. </P>
  2124. <L PROPNAME="AREA_CODE" PROPID="AREA_CODE">
  2125. <P VAL="800" VALSTR="800">
  2126. eight hundred
  2127. </P>
  2128. <P VAL="900" VALSTR="900">
  2129. nine hundred
  2130. </P>
  2131. </L>
  2132. </L>
  2133. </RULE>
  2134. <RULE NAME="extension">
  2135. <P MIN="1" MAX="8">
  2136. <RULEREF NAME="digit"/>
  2137. </P>
  2138. </RULE>
  2139. <!-- ************************************************************************
  2140. DEGREES QUANTITIES
  2141. ************************************************************************ -->
  2142. <RULE NAME="degrees">
  2143. <L>
  2144. <P>
  2145. degrees
  2146. </P>
  2147. <P>
  2148. degree
  2149. </P>
  2150. </L>
  2151. </RULE>
  2152. <RULE NAME="temp_units">
  2153. <L PROPNAME="TEMP_UNITS" PROPID="TEMP_UNITS">
  2154. <P VALSTR="F">Fahrenheit</P>
  2155. <P VALSTR="C">Celsius</P>
  2156. <P VALSTR="C">Centigrade</P>
  2157. </L>
  2158. </RULE>
  2159. <RULE NAME="direction">
  2160. <L PROPNAME="DIRECTION" PROPID="DIRECTION">
  2161. <P VALSTR="N">north</P>
  2162. <P VALSTR="E">east</P>
  2163. <P VALSTR="S">south</P>
  2164. <P VALSTR="W">west</P>
  2165. </L>
  2166. </RULE>
  2167. <!-- ************************************************************************
  2168. MEASUREMENTS QUANTITIES
  2169. ************************************************************************ -->
  2170. <!--
  2171. number_all
  2172. A number_all is any type of number recognized by ITN and will never be called
  2173. as a toplevel rule
  2174. -->
  2175. <RULE NAME="number_all">
  2176. <L>
  2177. <P>
  2178. <RULEREF NAME="GRID_INTEGER" PROPNAME="NUMBER" PROPID="NUMBER"/>
  2179. </P>
  2180. <P>
  2181. <RULEREF NAME="GRID_FP_NUMBER" PROPNAME="NUMBER" PROPID="NUMBER"/>
  2182. </P>
  2183. <P>
  2184. <RULEREF NAME="GRID_FRACTION" PROPNAME="NUMBER" PROPID="NUMBER"/>
  2185. </P>
  2186. </L>
  2187. </RULE>
  2188. <RULE NAME="units">
  2189. <L PROPNAME="UNITS" PROPID="UNITS">
  2190. <P VALSTR="ml">milliliter</P>
  2191. <P VALSTR="ml">milliliters</P>
  2192. <P VALSTR="kg">kilogram</P>
  2193. <P VALSTR="kg">kilograms</P>
  2194. <P VALSTR="kg">kilo</P>
  2195. <P VALSTR="kg">kilo</P>
  2196. <P VALSTR="kg">of a kilogram</P>
  2197. <P VALSTR="km">kilometer</P>
  2198. <P VALSTR="km">kilometers</P>
  2199. <P VALSTR="km">of a kilometer</P>
  2200. <P VALSTR="cm">centimeter</P>
  2201. <P VALSTR="cm">centimeters</P>
  2202. <P VALSTR="cm">of a centimeter</P>
  2203. <P VALSTR="mm">millimeter</P>
  2204. <P VALSTR="mm">millimeters</P>
  2205. <P VALSTR="nm">nanometer</P>
  2206. <P VALSTR="nm">nanometers</P>
  2207. <P VALSTR="mu">micron</P>
  2208. <P VALSTR="mu">microns</P>
  2209. <P VALSTR="tsp.">teaspoon</P>
  2210. <P VALSTR="tsp.">teaspoons</P>
  2211. <P VALSTR="tsp.">of a teaspoon</P>
  2212. <P VALSTR="tbsp.">tablespoon</P>
  2213. <P VALSTR="tbsp.">tablespoons</P>
  2214. <P VALSTR="tbsp.">of a tablespoon</P>
  2215. <P VALSTR="fl. oz.">fluid ounce</P>
  2216. <P VALSTR="fl. oz.">fluid ounces</P>
  2217. <P VALSTR="mg">milligram</P>
  2218. <P VALSTR="mg">milligrams</P>
  2219. <P VALSTR="mph">mile per hour</P>
  2220. <P VALSTR="mph">miles per hour</P>
  2221. <P VALSTR="kph">kilometer per hour</P>
  2222. <P VALSTR="kph">kilometers per hour</P>
  2223. <P VALSTR="ms">millisecond</P>
  2224. <P VALSTR="ms">milliseconds</P>
  2225. <P VALSTR="K">K.</P>
  2226. <P VALSTR="KB">kilobyte</P>
  2227. <P VALSTR="KB">kilobytes</P>
  2228. <P VALSTR="KB">K.B.</P>
  2229. <P VALSTR="KB">K. byte</P>
  2230. <P VALSTR="KB">K. bytes</P>
  2231. <P VALSTR="MB">megabyte</P>
  2232. <P VALSTR="MB">megabytes</P>
  2233. <P VALSTR="MB">M.B.</P>
  2234. <P VALSTR="MB">meg</P>
  2235. <P VALSTR="MB">megs</P>
  2236. <P VALSTR="GB">gigabyte</P>
  2237. <P VALSTR="GB">gigabytes</P>
  2238. <P VALSTR="GB">G.B.</P>
  2239. <P VALSTR="GB">gig</P>
  2240. <P VALSTR="GB">gigs</P>
  2241. <P VALSTR="TB">terabyte</P>
  2242. <P VALSTR="TB">terabytes</P>
  2243. <P VALSTR="TB">T.B.</P>
  2244. <P VALSTR="Hz">hertz</P>
  2245. <P VALSTR="MHz">megahertz</P>
  2246. <P VALSTR="W">watt</P>
  2247. <P VALSTR="W">watts</P>
  2248. <P VALSTR="kW">kilowatt</P>
  2249. <P VALSTR="kW">kilowatts</P>
  2250. <P VALSTR="kWh">kilowatt hour</P>
  2251. <P VALSTR="kWh">kilowatt hours</P>
  2252. </L>
  2253. </RULE>
  2254. <RULE NAME="commonunits">
  2255. <L PROPNAME="UNITS" PROPID="UNITS">
  2256. <P VALSTR="yd.">yard</P>
  2257. <P VALSTR="yds.">yards</P>
  2258. <P VALSTR="yd.">of a yard</P>
  2259. <P VALSTR="ft.">foot</P>
  2260. <P VALSTR="ft.">feet</P>
  2261. <P VALSTR="ft.">of a foot</P>
  2262. <P VALSTR="in.">inch</P>
  2263. <P VALSTR="in.">inches</P>
  2264. <P VALSTR="in.">of an inch</P>
  2265. <P VALSTR="m">meter</P>
  2266. <P VALSTR="m">meters</P>
  2267. <P VALSTR="m">of a meter</P>
  2268. <P VALSTR="qt.">quart</P>
  2269. <P VALSTR="qt.">quarts</P>
  2270. <P VALSTR="qt.">of a quart</P>
  2271. <P VALSTR="l">liter</P>
  2272. <P VALSTR="l">liters</P>
  2273. <P VALSTR="l">of a liter</P>
  2274. <P VALSTR="lb.">pound</P>
  2275. <P VALSTR="lbs.">pounds</P>
  2276. <P VALSTR="lb.">of a pound</P>
  2277. <P VALSTR="oz.">ounce</P>
  2278. <P VALSTR="oz.">ounces</P>
  2279. <P VALSTR="oz.">of an ounce</P>
  2280. <P VALSTR="g">gram</P>
  2281. <P VALSTR="g">grams</P>
  2282. <P VALSTR="g">of a gram</P>
  2283. </L>
  2284. </RULE>
  2285. <!-- ************************************************************************
  2286. CURRENCY QUANTITIES
  2287. ************************************************************************ -->
  2288. <RULE NAME="currency_type">
  2289. <L PROPNAME="CURRENCY_TYPE" PROPID="CURRENCY_TYPE">
  2290. <P VALSTR="$">dollar</P>
  2291. <P VALSTR="$">dollars</P>
  2292. <P VALSTR="�">pound</P>
  2293. <P VALSTR="�">pounds</P>
  2294. </L>
  2295. </RULE>
  2296. <RULE NAME="currency_small_type">
  2297. <L PROPNAME="CURRENCY_SMALL_TYPE" PROPID="CURRENCY_SMALL_TYPE">
  2298. <P VALSTR="�">cent</P>
  2299. <P VALSTR="�">cents</P>
  2300. <P VALSTR="p">penny</P>
  2301. <P VALSTR="p">pence</P>
  2302. </L>
  2303. </RULE>
  2304. </GRAMMAR>