HoneyTable::read_item(): Read tag in one go
[xapian.git] / xapian-core / languages / norwegian.sbl
blob06f335092bc2ae1797a362b6ab5d25e2c2307503
1 // Alias: nb nn no
2 // Snowball's "Norwegian" stemmer works for both nb and nn
3 // according to AlexB on #xapian.
5 routines (
6            mark_regions
7            main_suffix
8            consonant_pair
9            other_suffix
12 externals ( stem )
14 integers ( p1 x )
16 groupings ( v s_ending )
18 stringescapes {}
20 /* special characters (in ISO Latin I) */
22 stringdef ae   hex 'E6'
23 stringdef ao   hex 'E5'
24 stringdef o/   hex 'F8'
26 define v 'aeiouy{ae}{ao}{o/}'
28 define s_ending  'bcdfghjlmnoprtvyz'
30 define mark_regions as (
32     $p1 = limit
34     test ( hop 3 setmark x )
35     goto v  gopast non-v  setmark p1
36     try ( $p1 < x  $p1 = x )
39 backwardmode (
41     define main_suffix as (
42         setlimit tomark p1 for ([substring])
43         among(
45             'a' 'e' 'ede' 'ande' 'ende' 'ane' 'ene' 'hetene' 'en' 'heten' 'ar'
46             'er' 'heter' 'as' 'es' 'edes' 'endes' 'enes' 'hetenes' 'ens'
47             'hetens' 'ers' 'ets' 'et' 'het' 'ast'
48                 (delete)
49             's'
50                 (s_ending or ('k' non-v) delete)
51             'erte' 'ert'
52                 (<-'er')
53         )
54     )
56     define consonant_pair as (
57         test (
58             setlimit tomark p1 for ([substring])
59             among(
60                 'dt' 'vt'
61             )
62         )
63         next] delete
64     )
66     define other_suffix as (
67         setlimit tomark p1 for ([substring])
68         among(
69             'leg' 'eleg' 'ig' 'eig' 'lig' 'elig' 'els' 'lov' 'elov' 'slov'
70             'hetslov'
71                 (delete)
72         )
73     )
76 define stem as (
78     do mark_regions
79     backwards (
80         do main_suffix
81         do consonant_pair
82         do other_suffix
83     )