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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. routines (
  2. prelude postlude mark_regions
  3. RV R1 R2
  4. attached_pronoun
  5. standard_suffix
  6. verb_suffix
  7. vowel_suffix
  8. )
  9. externals ( stem )
  10. integers ( pV p1 p2 )
  11. groupings ( v AEIO CG )
  12. stringescapes {}
  13. /* special characters */
  14. stringdef a' '{U+00E1}'
  15. stringdef a` '{U+00E0}'
  16. stringdef e' '{U+00E9}'
  17. stringdef e` '{U+00E8}'
  18. stringdef i' '{U+00ED}'
  19. stringdef i` '{U+00EC}'
  20. stringdef o' '{U+00F3}'
  21. stringdef o` '{U+00F2}'
  22. stringdef u' '{U+00FA}'
  23. stringdef u` '{U+00F9}'
  24. define v 'aeiou{a`}{e`}{i`}{o`}{u`}'
  25. define prelude as (
  26. test repeat (
  27. [substring] among(
  28. '{a'}' (<- '{a`}')
  29. '{e'}' (<- '{e`}')
  30. '{i'}' (<- '{i`}')
  31. '{o'}' (<- '{o`}')
  32. '{u'}' (<- '{u`}')
  33. 'qu' (<- 'qU')
  34. '' (next)
  35. )
  36. )
  37. repeat goto (
  38. v [ ('u' ] v <- 'U') or
  39. ('i' ] v <- 'I')
  40. )
  41. )
  42. define mark_regions as (
  43. $pV = limit
  44. $p1 = limit
  45. $p2 = limit // defaults
  46. do (
  47. ( v (non-v gopast v) or (v gopast non-v) )
  48. or
  49. ( non-v (non-v gopast v) or (v next) )
  50. setmark pV
  51. )
  52. do (
  53. gopast v gopast non-v setmark p1
  54. gopast v gopast non-v setmark p2
  55. )
  56. )
  57. define postlude as repeat (
  58. [substring] among(
  59. 'I' (<- 'i')
  60. 'U' (<- 'u')
  61. '' (next)
  62. )
  63. )
  64. backwardmode (
  65. define RV as $pV <= cursor
  66. define R1 as $p1 <= cursor
  67. define R2 as $p2 <= cursor
  68. define attached_pronoun as (
  69. [substring] among(
  70. 'ci' 'gli' 'la' 'le' 'li' 'lo'
  71. 'mi' 'ne' 'si' 'ti' 'vi'
  72. // the compound forms are:
  73. 'sene' 'gliela' 'gliele' 'glieli' 'glielo' 'gliene'
  74. 'mela' 'mele' 'meli' 'melo' 'mene'
  75. 'tela' 'tele' 'teli' 'telo' 'tene'
  76. 'cela' 'cele' 'celi' 'celo' 'cene'
  77. 'vela' 'vele' 'veli' 'velo' 'vene'
  78. )
  79. among( (RV)
  80. 'ando' 'endo' (delete)
  81. 'ar' 'er' 'ir' (<- 'e')
  82. )
  83. )
  84. define standard_suffix as (
  85. [substring] among(
  86. 'anza' 'anze' 'ico' 'ici' 'ica' 'ice' 'iche' 'ichi' 'ismo'
  87. 'ismi' 'abile' 'abili' 'ibile' 'ibili' 'ista' 'iste' 'isti'
  88. 'ist{a`}' 'ist{e`}' 'ist{i`}' 'oso' 'osi' 'osa' 'ose' 'mente'
  89. 'atrice' 'atrici'
  90. 'ante' 'anti' // Note 1
  91. ( R2 delete )
  92. 'azione' 'azioni' 'atore' 'atori'
  93. ( R2 delete
  94. try ( ['ic'] R2 delete )
  95. )
  96. 'logia' 'logie'
  97. ( R2 <- 'log' )
  98. 'uzione' 'uzioni' 'usione' 'usioni'
  99. ( R2 <- 'u' )
  100. 'enza' 'enze'
  101. ( R2 <- 'ente' )
  102. 'amento' 'amenti' 'imento' 'imenti'
  103. ( RV delete )
  104. 'amente' (
  105. R1 delete
  106. try (
  107. [substring] R2 delete among(
  108. 'iv' ( ['at'] R2 delete )
  109. 'os' 'ic' 'abil'
  110. )
  111. )
  112. )
  113. 'it{a`}' (
  114. R2 delete
  115. try (
  116. [substring] among(
  117. 'abil' 'ic' 'iv' (R2 delete)
  118. )
  119. )
  120. )
  121. 'ivo' 'ivi' 'iva' 'ive' (
  122. R2 delete
  123. try ( ['at'] R2 delete ['ic'] R2 delete )
  124. )
  125. )
  126. )
  127. define verb_suffix as setlimit tomark pV for (
  128. [substring] among(
  129. 'ammo' 'ando' 'ano' 'are' 'arono' 'asse' 'assero' 'assi'
  130. 'assimo' 'ata' 'ate' 'ati' 'ato' 'ava' 'avamo' 'avano' 'avate'
  131. 'avi' 'avo' 'emmo' 'enda' 'ende' 'endi' 'endo' 'er{a`}' 'erai'
  132. 'eranno' 'ere' 'erebbe' 'erebbero' 'erei' 'eremmo' 'eremo'
  133. 'ereste' 'eresti' 'erete' 'er{o`}' 'erono' 'essero' 'ete'
  134. 'eva' 'evamo' 'evano' 'evate' 'evi' 'evo' 'Yamo' 'iamo' 'immo'
  135. 'ir{a`}' 'irai' 'iranno' 'ire' 'irebbe' 'irebbero' 'irei'
  136. 'iremmo' 'iremo' 'ireste' 'iresti' 'irete' 'ir{o`}' 'irono'
  137. 'isca' 'iscano' 'isce' 'isci' 'isco' 'iscono' 'issero' 'ita'
  138. 'ite' 'iti' 'ito' 'iva' 'ivamo' 'ivano' 'ivate' 'ivi' 'ivo'
  139. 'ono' 'uta' 'ute' 'uti' 'uto'
  140. 'ar' 'ir' // but 'er' is problematical
  141. (delete)
  142. )
  143. )
  144. define AEIO 'aeio{a`}{e`}{i`}{o`}'
  145. define CG 'cg'
  146. define vowel_suffix as (
  147. try (
  148. [AEIO] RV delete
  149. ['i'] RV delete
  150. )
  151. try (
  152. ['h'] CG RV delete
  153. )
  154. )
  155. )
  156. define stem as (
  157. do prelude
  158. do mark_regions
  159. backwards (
  160. do attached_pronoun
  161. do (standard_suffix or verb_suffix)
  162. do vowel_suffix
  163. )
  164. do postlude
  165. )
  166. /*
  167. Note 1: additions of 15 Jun 2005
  168. */