1/*
2 * language_data.js
3 * ~~~~~~~~~~~~~~~~
4 *
5 * This script contains the language-specific data used by searchtools.js,
6 * namely the list of stopwords, stemmer, scorer and splitter.
7 *
8 * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
9 * :license: BSD, see LICENSE for details.
10 *
11 */
12
13var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
14
15
16/* Non-minified version is copied as a separate JS file, is available */
17
18/**
19 * Porter Stemmer
20 */
21var Stemmer = function() {
22
23  var step2list = {
24    ational: 'ate',
25    tional: 'tion',
26    enci: 'ence',
27    anci: 'ance',
28    izer: 'ize',
29    bli: 'ble',
30    alli: 'al',
31    entli: 'ent',
32    eli: 'e',
33    ousli: 'ous',
34    ization: 'ize',
35    ation: 'ate',
36    ator: 'ate',
37    alism: 'al',
38    iveness: 'ive',
39    fulness: 'ful',
40    ousness: 'ous',
41    aliti: 'al',
42    iviti: 'ive',
43    biliti: 'ble',
44    logi: 'log'
45  };
46
47  var step3list = {
48    icate: 'ic',
49    ative: '',
50    alize: 'al',
51    iciti: 'ic',
52    ical: 'ic',
53    ful: '',
54    ness: ''
55  };
56
57  var c = "[^aeiou]";          // consonant
58  var v = "[aeiouy]";          // vowel
59  var C = c + "[^aeiouy]*";    // consonant sequence
60  var V = v + "[aeiou]*";      // vowel sequence
61
62  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
63  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
64  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
65  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
66
67  this.stemWord = function (w) {
68    var stem;
69    var suffix;
70    var firstch;
71    var origword = w;
72
73    if (w.length < 3)
74      return w;
75
76    var re;
77    var re2;
78    var re3;
79    var re4;
80
81    firstch = w.substr(0,1);
82    if (firstch == "y")
83      w = firstch.toUpperCase() + w.substr(1);
84
85    // Step 1a
86    re = /^(.+?)(ss|i)es$/;
87    re2 = /^(.+?)([^s])s$/;
88
89    if (re.test(w))
90      w = w.replace(re,"$1$2");
91    else if (re2.test(w))
92      w = w.replace(re2,"$1$2");
93
94    // Step 1b
95    re = /^(.+?)eed$/;
96    re2 = /^(.+?)(ed|ing)$/;
97    if (re.test(w)) {
98      var fp = re.exec(w);
99      re = new RegExp(mgr0);
100      if (re.test(fp[1])) {
101        re = /.$/;
102        w = w.replace(re,"");
103      }
104    }
105    else if (re2.test(w)) {
106      var fp = re2.exec(w);
107      stem = fp[1];
108      re2 = new RegExp(s_v);
109      if (re2.test(stem)) {
110        w = stem;
111        re2 = /(at|bl|iz)$/;
112        re3 = new RegExp("([^aeiouylsz])\\1$");
113        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
114        if (re2.test(w))
115          w = w + "e";
116        else if (re3.test(w)) {
117          re = /.$/;
118          w = w.replace(re,"");
119        }
120        else if (re4.test(w))
121          w = w + "e";
122      }
123    }
124
125    // Step 1c
126    re = /^(.+?)y$/;
127    if (re.test(w)) {
128      var fp = re.exec(w);
129      stem = fp[1];
130      re = new RegExp(s_v);
131      if (re.test(stem))
132        w = stem + "i";
133    }
134
135    // Step 2
136    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
137    if (re.test(w)) {
138      var fp = re.exec(w);
139      stem = fp[1];
140      suffix = fp[2];
141      re = new RegExp(mgr0);
142      if (re.test(stem))
143        w = stem + step2list[suffix];
144    }
145
146    // Step 3
147    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
148    if (re.test(w)) {
149      var fp = re.exec(w);
150      stem = fp[1];
151      suffix = fp[2];
152      re = new RegExp(mgr0);
153      if (re.test(stem))
154        w = stem + step3list[suffix];
155    }
156
157    // Step 4
158    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
159    re2 = /^(.+?)(s|t)(ion)$/;
160    if (re.test(w)) {
161      var fp = re.exec(w);
162      stem = fp[1];
163      re = new RegExp(mgr1);
164      if (re.test(stem))
165        w = stem;
166    }
167    else if (re2.test(w)) {
168      var fp = re2.exec(w);
169      stem = fp[1] + fp[2];
170      re2 = new RegExp(mgr1);
171      if (re2.test(stem))
172        w = stem;
173    }
174
175    // Step 5
176    re = /^(.+?)e$/;
177    if (re.test(w)) {
178      var fp = re.exec(w);
179      stem = fp[1];
180      re = new RegExp(mgr1);
181      re2 = new RegExp(meq1);
182      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
183      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
184        w = stem;
185    }
186    re = /ll$/;
187    re2 = new RegExp(mgr1);
188    if (re.test(w) && re2.test(w)) {
189      re = /.$/;
190      w = w.replace(re,"");
191    }
192
193    // and turn initial Y back to y
194    if (firstch == "y")
195      w = firstch.toLowerCase() + w.substr(1);
196    return w;
197  }
198}
199
200
201
202
203var splitChars = (function() {
204    var result = {};
205    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
206         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
207         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
208         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
209         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
210         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
211         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
212         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
213         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
214         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
215    var i, j, start, end;
216    for (i = 0; i < singles.length; i++) {
217        result[singles[i]] = true;
218    }
219    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
220         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
221         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
222         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
223         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
224         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
225         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
226         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
227         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
228         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
229         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
230         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
231         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
232         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
233         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
234         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
235         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
236         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
237         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
238         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
239         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
240         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
241         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
242         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
243         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
244         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
245         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
246         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
247         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
248         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
249         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
250         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
251         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
252         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
253         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
254         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
255         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
256         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
257         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
258         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
259         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
260         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
261         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
262         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
263         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
264         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
265         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
266         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
267         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
268    for (i = 0; i < ranges.length; i++) {
269        start = ranges[i][0];
270        end = ranges[i][1];
271        for (j = start; j <= end; j++) {
272            result[j] = true;
273        }
274    }
275    return result;
276})();
277
278function splitQuery(query) {
279    var result = [];
280    var start = -1;
281    for (var i = 0; i < query.length; i++) {
282        if (splitChars[query.charCodeAt(i)]) {
283            if (start !== -1) {
284                result.push(query.slice(start, i));
285                start = -1;
286            }
287        } else if (start === -1) {
288            start = i;
289        }
290    }
291    if (start !== -1) {
292        result.push(query.slice(start));
293    }
294    return result;
295}
296
297
298