200 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			200 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | /* | ||
|  |  * language_data.js | ||
|  |  * ~~~~~~~~~~~~~~~~ | ||
|  |  * | ||
|  |  * This script contains the language-specific data used by searchtools.js, | ||
|  |  * namely the list of stopwords, stemmer, scorer and splitter. | ||
|  |  * | ||
|  |  * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. | ||
|  |  * :license: BSD, see LICENSE for details. | ||
|  |  * | ||
|  |  */ | ||
|  | 
 | ||
|  | var 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"]; | ||
|  | 
 | ||
|  | 
 | ||
|  | /* Non-minified version is copied as a separate JS file, is available */ | ||
|  | 
 | ||
|  | /** | ||
|  |  * Porter Stemmer | ||
|  |  */ | ||
|  | var Stemmer = function() { | ||
|  | 
 | ||
|  |   var step2list = { | ||
|  |     ational: 'ate', | ||
|  |     tional: 'tion', | ||
|  |     enci: 'ence', | ||
|  |     anci: 'ance', | ||
|  |     izer: 'ize', | ||
|  |     bli: 'ble', | ||
|  |     alli: 'al', | ||
|  |     entli: 'ent', | ||
|  |     eli: 'e', | ||
|  |     ousli: 'ous', | ||
|  |     ization: 'ize', | ||
|  |     ation: 'ate', | ||
|  |     ator: 'ate', | ||
|  |     alism: 'al', | ||
|  |     iveness: 'ive', | ||
|  |     fulness: 'ful', | ||
|  |     ousness: 'ous', | ||
|  |     aliti: 'al', | ||
|  |     iviti: 'ive', | ||
|  |     biliti: 'ble', | ||
|  |     logi: 'log' | ||
|  |   }; | ||
|  | 
 | ||
|  |   var step3list = { | ||
|  |     icate: 'ic', | ||
|  |     ative: '', | ||
|  |     alize: 'al', | ||
|  |     iciti: 'ic', | ||
|  |     ical: 'ic', | ||
|  |     ful: '', | ||
|  |     ness: '' | ||
|  |   }; | ||
|  | 
 | ||
|  |   var c = "[^aeiou]";          // consonant
 | ||
|  |   var v = "[aeiouy]";          // vowel
 | ||
|  |   var C = c + "[^aeiouy]*";    // consonant sequence
 | ||
|  |   var V = v + "[aeiou]*";      // vowel sequence
 | ||
|  | 
 | ||
|  |   var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
 | ||
|  |   var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
 | ||
|  |   var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
 | ||
|  |   var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
 | ||
|  | 
 | ||
|  |   this.stemWord = function (w) { | ||
|  |     var stem; | ||
|  |     var suffix; | ||
|  |     var firstch; | ||
|  |     var origword = w; | ||
|  | 
 | ||
|  |     if (w.length < 3) | ||
|  |       return w; | ||
|  | 
 | ||
|  |     var re; | ||
|  |     var re2; | ||
|  |     var re3; | ||
|  |     var re4; | ||
|  | 
 | ||
|  |     firstch = w.substr(0,1); | ||
|  |     if (firstch == "y") | ||
|  |       w = firstch.toUpperCase() + w.substr(1); | ||
|  | 
 | ||
|  |     // Step 1a
 | ||
|  |     re = /^(.+?)(ss|i)es$/; | ||
|  |     re2 = /^(.+?)([^s])s$/; | ||
|  | 
 | ||
|  |     if (re.test(w)) | ||
|  |       w = w.replace(re,"$1$2"); | ||
|  |     else if (re2.test(w)) | ||
|  |       w = w.replace(re2,"$1$2"); | ||
|  | 
 | ||
|  |     // Step 1b
 | ||
|  |     re = /^(.+?)eed$/; | ||
|  |     re2 = /^(.+?)(ed|ing)$/; | ||
|  |     if (re.test(w)) { | ||
|  |       var fp = re.exec(w); | ||
|  |       re = new RegExp(mgr0); | ||
|  |       if (re.test(fp[1])) { | ||
|  |         re = /.$/; | ||
|  |         w = w.replace(re,""); | ||
|  |       } | ||
|  |     } | ||
|  |     else if (re2.test(w)) { | ||
|  |       var fp = re2.exec(w); | ||
|  |       stem = fp[1]; | ||
|  |       re2 = new RegExp(s_v); | ||
|  |       if (re2.test(stem)) { | ||
|  |         w = stem; | ||
|  |         re2 = /(at|bl|iz)$/; | ||
|  |         re3 = new RegExp("([^aeiouylsz])\\1$"); | ||
|  |         re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); | ||
|  |         if (re2.test(w)) | ||
|  |           w = w + "e"; | ||
|  |         else if (re3.test(w)) { | ||
|  |           re = /.$/; | ||
|  |           w = w.replace(re,""); | ||
|  |         } | ||
|  |         else if (re4.test(w)) | ||
|  |           w = w + "e"; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     // Step 1c
 | ||
|  |     re = /^(.+?)y$/; | ||
|  |     if (re.test(w)) { | ||
|  |       var fp = re.exec(w); | ||
|  |       stem = fp[1]; | ||
|  |       re = new RegExp(s_v); | ||
|  |       if (re.test(stem)) | ||
|  |         w = stem + "i"; | ||
|  |     } | ||
|  | 
 | ||
|  |     // Step 2
 | ||
|  |     re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; | ||
|  |     if (re.test(w)) { | ||
|  |       var fp = re.exec(w); | ||
|  |       stem = fp[1]; | ||
|  |       suffix = fp[2]; | ||
|  |       re = new RegExp(mgr0); | ||
|  |       if (re.test(stem)) | ||
|  |         w = stem + step2list[suffix]; | ||
|  |     } | ||
|  | 
 | ||
|  |     // Step 3
 | ||
|  |     re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; | ||
|  |     if (re.test(w)) { | ||
|  |       var fp = re.exec(w); | ||
|  |       stem = fp[1]; | ||
|  |       suffix = fp[2]; | ||
|  |       re = new RegExp(mgr0); | ||
|  |       if (re.test(stem)) | ||
|  |         w = stem + step3list[suffix]; | ||
|  |     } | ||
|  | 
 | ||
|  |     // Step 4
 | ||
|  |     re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; | ||
|  |     re2 = /^(.+?)(s|t)(ion)$/; | ||
|  |     if (re.test(w)) { | ||
|  |       var fp = re.exec(w); | ||
|  |       stem = fp[1]; | ||
|  |       re = new RegExp(mgr1); | ||
|  |       if (re.test(stem)) | ||
|  |         w = stem; | ||
|  |     } | ||
|  |     else if (re2.test(w)) { | ||
|  |       var fp = re2.exec(w); | ||
|  |       stem = fp[1] + fp[2]; | ||
|  |       re2 = new RegExp(mgr1); | ||
|  |       if (re2.test(stem)) | ||
|  |         w = stem; | ||
|  |     } | ||
|  | 
 | ||
|  |     // Step 5
 | ||
|  |     re = /^(.+?)e$/; | ||
|  |     if (re.test(w)) { | ||
|  |       var fp = re.exec(w); | ||
|  |       stem = fp[1]; | ||
|  |       re = new RegExp(mgr1); | ||
|  |       re2 = new RegExp(meq1); | ||
|  |       re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); | ||
|  |       if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) | ||
|  |         w = stem; | ||
|  |     } | ||
|  |     re = /ll$/; | ||
|  |     re2 = new RegExp(mgr1); | ||
|  |     if (re.test(w) && re2.test(w)) { | ||
|  |       re = /.$/; | ||
|  |       w = w.replace(re,""); | ||
|  |     } | ||
|  | 
 | ||
|  |     // and turn initial Y back to y
 | ||
|  |     if (firstch == "y") | ||
|  |       w = firstch.toLowerCase() + w.substr(1); | ||
|  |     return w; | ||
|  |   } | ||
|  | } | ||
|  | 
 |