vendor: 2,956 bytes, lines 1-94
1/*! 2 * Lunr languages, `Chinese` language 3 * https://github.com/MihaiValentin/lunr-languages 4 * 5 * Copyright 2019, Felix Lian (repairearth) 6 * http://www.mozilla.org/MPL/ 7 */ 8/*! 9 * based on 10 * Snowball zhvaScript Library v0.3 11 * http://code.google.com/p/urim/ 12 * http://snowball.tartarus.org/ 13 * 14 * Copyright 2010, Oleg Mazko 15 * http://www.mozilla.org/MPL/ 16 */ 17 18/** 19 * export the module via AMD, CommonJS or as a browser global 20 * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js 21 */ 22; 23(function(root, factory) { 24 if (typeof define === 'function' && define.amd) { 25 // AMD. Register as an anonymous module. 26 define(factory) 27 } else if (typeof exports === 'object') { 28 /** 29 * Node. Does not work with strict CommonJS, but 30 * only CommonJS-like environments that support module.exports, 31 * like Node. 32 */ 33 // module.exports = factory(require('@node-rs/jieba')) 34 module.exports = factory() 35 } else { 36 // Browser globals (root is window) 37 factory()(root.lunr); 38 } 39}(this, function() { 40 /** 41 * Just return a value to define the module export. 42 * This example returns an object, but the module 43 * can return a function as the exported value. 44 */ 45 return function(lunr) { 46 /* throw error if lunr is not yet included */ 47 if ('undefined' === typeof lunr) { 48 throw new Error('Lunr is not present. Please include / require Lunr before this script.'); 49 } 50 51 /* throw error if lunr stemmer support is not yet included */ 52 if ('undefined' === typeof lunr.stemmerSupport) { 53 throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); 54 } 55 56 /* 57 Chinese tokenization is trickier, since it does not 58 take into account spaces. 59 Since the tokenization function is represented different 60 internally for each of the Lunr versions, this had to be done 61 in order to try to try to pick the best way of doing this based 62 on the Lunr version 63 */ 64 var isLunr2 = lunr.version[0] == "2"; 65 66 /* register specific locale function */ 67 lunr.zh = function() { 68 this.pipeline.reset(); 69 this.pipeline.add( 70 lunr.zh.trimmer, 71 lunr.zh.stopWordFilter, 72 lunr.zh.stemmer 73 ); 74 75 // change the tokenizer for Chinese one 76 if (isLunr2) { // for lunr version 2.0.0 77 this.tokenizer = lunr.zh.tokenizer; 78 } else { 79 if (lunr.tokenizer) { // for lunr version 0.6.0 80 lunr.tokenizer = lunr.zh.tokenizer; 81 } 82 if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 83 this.tokenizerFn = lunr.zh.tokenizer; 84 } 85 } 86 }; 87 88 lunr.zh.tokenizer = function(obj) { 89 if (!arguments.length || obj == null || obj == undefined) return [] 90 if (Array.isArray(obj)) return obj.map(function(t) { 91 return isLunr2 ? new lunr.Token(t.toLowerCase()) : t.toLowerCase() 92 }) 93 94 var tokens = [];
95 try { 96 var segmenter = new Intl.Segmenter('zh', { granularity: 'word' }); 97 var str = obj.toString().trim().toLowerCase(); 98 var segments = segmenter.segment(str) 99 for (seg of segments) { 100 if (seg.isWordLike) { tokens = tokens.concat(seg.segment) } 101 } 102 } catch (error) { 103 console.error(error); 104 } 105 106 tokens = tokens.filter(function(token) { 107 return !!token; 108 }); 109 110 var fromIndex = 0 111 112 return tokens.map(function(token, index) { 113 if (isLunr2) { 114 var start = str.indexOf(token, fromIndex) 115 116 var tokenMetadata = {} 117 tokenMetadata["position"] = [start, token.length] 118 tokenMetadata["index"] = index 119 120 fromIndex = start 121 122 return new lunr.Token(token, tokenMetadata); 123 } else { 124 return token 125 } 126 }); 127 } 128 129 /* lunr trimmer function */ 130 lunr.zh.wordCharacters = "\\w\u4e00-\u9fa5"; 131 lunr.zh.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.zh.wordCharacters); 132 lunr.Pipeline.registerFunction(lunr.zh.trimmer, 'trimmer-zh'); 133 134 /* lunr stemmer function */ 135 lunr.zh.stemmer = (function() { 136 137 /* TODO Chinese stemmer */ 138 return function(word) { 139 return word; 140 } 141 })(); 142 lunr.Pipeline.registerFunction(lunr.zh.stemmer, 'stemmer-zh'); 143 144 /* lunr stop word filter. see https://www.ranks.nl/stopwords/chinese-stopwords */ 145 lunr.zh.stopWordFilter = lunr.generateStopWordFilter( 146 'ç ä¸ ä¸ å¨ äºº æ æ¯ 为 以 äº ä¸ ä» è å ä¹ æ¥ å äº å ä¸ å¯ å° ç± è¿ ä¸ ä¹ æ¤ ä½ å¹¶ 个 å ¶ å·² æ å° æ 们 èµ· æ å ä» å» å¥½ åª å æ å¾ äº¦ æ æ é£ ä½ ä¹ å® å§ è¢« æ¯ å« è¶ å½ ä» å° å¾ æ å¡ å¿ å° è¯¥ å ç» è· å ä½ è¿ å³ å æ¢ ç æ® è· é å¦ äº å¦ ä¹ æ¯ ä»¬ å æ¿ åª é£ æ¨ å ä¸ å´ è®© ä» å¥ å¦ è¥ ä½¿ è° è½ é å æ 她 å å¡ å¾ åª äº å æ²¿ å ç¨ äº å± å æ æ¾ è³ è´ ç 诸 èª'.split(' ')); 147 lunr.Pipeline.registerFunction(lunr.zh.stopWordFilter, 'stopWordFilter-zh'); 148 }; 149}))
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.