1"""
2    sphinx.search.sv
3    ~~~~~~~~~~~~~~~~
4
5    Swedish search language: includes the JS Swedish stemmer.
6
7    :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
8    :license: BSD, see LICENSE for details.
9"""
10
11from typing import Dict
12
13import snowballstemmer
14
15from sphinx.search import SearchLanguage, parse_stop_word
16
17swedish_stopwords = parse_stop_word('''
18| source: http://snowball.tartarus.org/algorithms/swedish/stop.txt
19och            | and
20det            | it, this/that
21att            | to (with infinitive)
22i              | in, at
23en             | a
24jag            | I
25hon            | she
26som            | who, that
27han            | he
28på             | on
29den            | it, this/that
30med            | with
31var            | where, each
32sig            | him(self) etc
33för            | for
34så             | so (also: seed)
35till           | to
36är             | is
37men            | but
38ett            | a
39om             | if; around, about
40hade           | had
41de             | they, these/those
42av             | of
43icke           | not, no
44mig            | me
45du             | you
46henne          | her
47då             | then, when
48sin            | his
49nu             | now
50har            | have
51inte           | inte någon = no one
52hans           | his
53honom          | him
54skulle         | 'sake'
55hennes         | her
56där            | there
57min            | my
58man            | one (pronoun)
59ej             | nor
60vid            | at, by, on (also: vast)
61kunde          | could
62något          | some etc
63från           | from, off
64ut             | out
65när            | when
66efter          | after, behind
67upp            | up
68vi             | we
69dem            | them
70vara           | be
71vad            | what
72över           | over
73än             | than
74dig            | you
75kan            | can
76sina           | his
77här            | here
78ha             | have
79mot            | towards
80alla           | all
81under          | under (also: wonder)
82någon          | some etc
83eller          | or (else)
84allt           | all
85mycket         | much
86sedan          | since
87ju             | why
88denna          | this/that
89själv          | myself, yourself etc
90detta          | this/that
91åt             | to
92utan           | without
93varit          | was
94hur            | how
95ingen          | no
96mitt           | my
97ni             | you
98bli            | to be, become
99blev           | from bli
100oss            | us
101din            | thy
102dessa          | these/those
103några          | some etc
104deras          | their
105blir           | from bli
106mina           | my
107samma          | (the) same
108vilken         | who, that
109er             | you, your
110sådan          | such a
111vår            | our
112blivit         | from bli
113dess           | its
114inom           | within
115mellan         | between
116sådant         | such a
117varför         | why
118varje          | each
119vilka          | who, that
120ditt           | thy
121vem            | who
122vilket         | who, that
123sitta          | his
124sådana         | such a
125vart           | each
126dina           | thy
127vars           | whose
128vårt           | our
129våra           | our
130ert            | your
131era            | your
132vilkas         | whose
133''')
134
135
136class SearchSwedish(SearchLanguage):
137    lang = 'sv'
138    language_name = 'Swedish'
139    js_stemmer_rawcode = 'swedish-stemmer.js'
140    stopwords = swedish_stopwords
141
142    def init(self, options: Dict) -> None:
143        self.stemmer = snowballstemmer.stemmer('swedish')
144
145    def stem(self, word: str) -> str:
146        return self.stemmer.stemWord(word.lower())
147