HoneyTable::read_item(): Read tag in one go
[xapian.git] / xapian-core / languages / romanian.sbl
blobb7d2637f28de245214ccd41688d1aa0a98897073
1 // Alias: ro
3 routines (
4            prelude postlude mark_regions
5            RV R1 R2
6            step_0
7            standard_suffix combo_suffix
8            verb_suffix
9            vowel_suffix
12 externals ( stem )
14 integers ( pV p1 p2 )
16 groupings ( v )
18 booleans  ( standard_suffix_removed )
20 stringescapes {}
22 /* special characters */
24 stringdef a^   hex '0E2'  // a circumflex
25 stringdef i^   hex '0EE'  // i circumflex
26 stringdef a+   hex '103'  // a breve
27 stringdef s,   hex '15F'  // s cedilla
28 stringdef t,   hex '163'  // t cedilla
30 define v 'aeiou{a^}{i^}{a+}'
32 define prelude as (
33     repeat goto (
34         v [ ('u' ] v <- 'U') or
35             ('i' ] v <- 'I')
36     )
39 define mark_regions as (
41     $pV = limit
42     $p1 = limit
43     $p2 = limit // defaults
45     do (
46         ( v (non-v gopast v) or (v gopast non-v) )
47         or
48         ( non-v (non-v gopast v) or (v next) )
49         setmark pV
50     )
51     do (
52         gopast v gopast non-v setmark p1
53         gopast v gopast non-v setmark p2
54     )
57 define postlude as repeat (
59     [substring] among(
60         'I'  (<- 'i')
61         'U'  (<- 'u')
62         ''   (next)
63     )
67 backwardmode (
69     define RV as $pV <= cursor
70     define R1 as $p1 <= cursor
71     define R2 as $p2 <= cursor
73     define step_0 as (
74         [substring] R1 among(
75             'ul' 'ului'
76                 ( delete )
77             'aua'
78                 ( <-'a' )
79             'ea' 'ele' 'elor'
80                 ( <-'e' )
81             'ii' 'iua' 'iei' 'iile' 'iilor' 'ilor'
82                 ( <-'i')
83             'ile'
84                 ( not 'ab' <- 'i' )
85             'atei'
86                 ( <- 'at' )
87             'a{t,}ie' 'a{t,}ia'
88                 ( <- 'a{t,}i' )
89         )
90     )
92     define combo_suffix as test (
93         [substring] R1 (
94             among(
95             /* 'IST'. alternative: include the following
96                 'alism' 'alisme'
97                 'alist' 'alista' 'aliste' 'alisti' 'alist{a+}' 'ali{s,}ti' (
98                     <- 'al'
99                 )
100             */
101                 'abilitate' 'abilitati' 'abilit{a+}i' 'abilit{a+}{t,}i' (
102                     <- 'abil'
103                 )
104                 'ibilitate' (
105                     <- 'ibil'
106                 )
107                 'ivitate' 'ivitati' 'ivit{a+}i' 'ivit{a+}{t,}i' (
108                     <- 'iv'
109                 )
110                 'icitate' 'icitati' 'icit{a+}i' 'icit{a+}{t,}i'
111                 'icator' 'icatori'
112                 'iciv' 'iciva' 'icive' 'icivi' 'iciv{a+}'
113                 'ical' 'icala' 'icale' 'icali' 'ical{a+}' (
114                     <- 'ic'
115                 )
116                 'ativ' 'ativa' 'ative' 'ativi' 'ativ{a+}' 'a{t,}iune'
117                 'atoare' 'ator' 'atori'
118                 '{a+}toare' '{a+}tor' '{a+}tori' (
119                     <- 'at'
120                 )
121                 'itiv' 'itiva' 'itive' 'itivi' 'itiv{a+}' 'i{t,}iune'
122                 'itoare' 'itor' 'itori' (
123                     <- 'it'
124                 )
125             )
126             set standard_suffix_removed
127         )
128     )
130     define standard_suffix as (
131         unset standard_suffix_removed
132         repeat combo_suffix
133         [substring] R2 (
134             among(
136                 // past participle is treated here, rather than
137                 // as a verb ending:
138                 'at' 'ata' 'at{a+}' 'ati' 'ate'
139                 'ut' 'uta' 'ut{a+}' 'uti' 'ute'
140                 'it' 'ita' 'it{a+}' 'iti' 'ite'
142                 'ic' 'ica' 'ice' 'ici' 'ic{a+}'
143                 'abil' 'abila' 'abile' 'abili' 'abil{a+}'
144                 'ibil' 'ibila' 'ibile' 'ibili' 'ibil{a+}'
145                 'oasa' 'oas{a+}' 'oase' 'os' 'osi' 'o{s,}i'
146                 'ant' 'anta' 'ante' 'anti' 'ant{a+}'
147                 'ator' 'atori'
148                 'itate' 'itati' 'it{a+}i' 'it{a+}{t,}i'
149                 'iv' 'iva' 'ive' 'ivi' 'iv{a+}' (
150                     delete
151                 )
152                 'iune' 'iuni' (
153                     '{t,}'] <- 't'
154                 )
155                 'ism' 'isme'
156                 'ist' 'ista' 'iste' 'isti' 'ist{a+}' 'i{s,}ti' (
157                     <- 'ist'
158                     /* 'IST'. alternative: remove with <- '' */
159                 )
160             )
161             set standard_suffix_removed
162         )
163     )
165     define verb_suffix as setlimit tomark pV for (
166         [substring] among(
167             // 'long' infinitive:
168             'are' 'ere' 'ire' '{a^}re'
170             // gerund:
171             'ind' '{a^}nd'
172             'indu' '{a^}ndu'
174             'eze'
175             'easc{a+}'
176             // present:
177             'ez' 'ezi' 'eaz{a+}' 'esc' 'e{s,}ti'
178             'e{s,}te'
179             '{a+}sc' '{a+}{s,}ti'
180             '{a+}{s,}te'
182             // imperfect:
183             'am' 'ai' 'au'
184             'eam' 'eai' 'ea' 'ea{t,}i' 'eau'
185             'iam' 'iai' 'ia' 'ia{t,}i' 'iau'
187             // past: // (not 'ii')
188             'ui'
189             'a{s,}i' 'ar{a+}m' 'ar{a+}{t,}i' 'ar{a+}'
190             'u{s,}i' 'ur{a+}m' 'ur{a+}{t,}i' 'ur{a+}'
191             'i{s,}i' 'ir{a+}m' 'ir{a+}{t,}i' 'ir{a+}'
192             '{a^}i' '{a^}{s,}i' '{a^}r{a+}m' '{a^}r{a+}{t,}i' '{a^}r{a+}'
194             // pluferfect:
195             'asem' 'ase{s,}i' 'ase' 'aser{a+}m' 'aser{a+}{t,}i' 'aser{a+}'
196             'isem' 'ise{s,}i' 'ise' 'iser{a+}m' 'iser{a+}{t,}i' 'iser{a+}'
197             '{a^}sem' '{a^}se{s,}i' '{a^}se' '{a^}ser{a+}m' '{a^}ser{a+}{t,}i'
198             '{a^}ser{a+}'
199             'usem' 'use{s,}i' 'use' 'user{a+}m' 'user{a+}{t,}i' 'user{a+}'
201                 ( non-v or 'u'  delete )
203             // present:
204             '{a+}m' 'a{t,}i'
205             'em' 'e{t,}i'
206             'im' 'i{t,}i'
207             '{a^}m' '{a^}{t,}i'
209             // past:
210             'se{s,}i' 'ser{a+}m' 'ser{a+}{t,}i' 'ser{a+}'
211             'sei' 'se'
213             // pluperfect:
214             'sesem' 'sese{s,}i' 'sese' 'seser{a+}m' 'seser{a+}{t,}i' 'seser{a+}'
215                 (delete)
216         )
217     )
219     define vowel_suffix as (
220         [substring] RV among (
221             'a' 'e' 'i' 'ie' '{a+}' ( delete )
222         )
223     )
226 define stem as (
227     do prelude
228     do mark_regions
229     backwards (
230         do step_0
231         do standard_suffix
232         do ( standard_suffix_removed or verb_suffix )
233         do vowel_suffix
234     )
235     do postlude