From e9ec93a471d9a753db01b682e75c52b32adf16f2 Mon Sep 17 00:00:00 2001 From: Christoph Cullmann Date: Thu, 18 Feb 2021 21:44:01 +0100 Subject: use LoveIt theme, self hosted --- themes/LoveIt/assets/lib/lunr/lunr.th.js | 97 ++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 themes/LoveIt/assets/lib/lunr/lunr.th.js (limited to 'themes/LoveIt/assets/lib/lunr/lunr.th.js') diff --git a/themes/LoveIt/assets/lib/lunr/lunr.th.js b/themes/LoveIt/assets/lib/lunr/lunr.th.js new file mode 100644 index 0000000..28a134d --- /dev/null +++ b/themes/LoveIt/assets/lib/lunr/lunr.th.js @@ -0,0 +1,97 @@ +/*! + * Lunr languages, `Thai` language + * https://github.com/MihaiValentin/lunr-languages + * + * Copyright 2017, Keerati Thiwanruk + * http://www.mozilla.org/MPL/ + */ +/*! + * based on + * Snowball JavaScript Library v0.3 + * http://code.google.com/p/urim/ + * http://snowball.tartarus.org/ + * + * Copyright 2010, Oleg Mazko + * http://www.mozilla.org/MPL/ + */ + +/** + * export the module via AMD, CommonJS or as a browser global + * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js + */ + +(function(root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(factory) + } else if (typeof exports === 'object') { + /** + * Node. Does not work with strict CommonJS, but + * only CommonJS-like environments that support module.exports, + * like Node. + */ + module.exports = factory() + } else { + // Browser globals (root is window) + factory()(root.lunr); + } +}(this, function() { + /** + * Just return a value to define the module export. + * This example returns an object, but the module + * can return a function as the exported value. + */ + return function(lunr) { + /* throw error if lunr is not yet included */ + if ('undefined' === typeof lunr) { + throw new Error('Lunr is not present. Please include / require Lunr before this script.'); + } + + /* throw error if lunr stemmer support is not yet included */ + if ('undefined' === typeof lunr.stemmerSupport) { + throw new Error('Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.'); + } + + /* + Thai tokenization is the same to Japanense, which does not take into account spaces. + So, it uses the same logic to assign tokenization function due to different Lunr versions. + */ + var isLunr2 = lunr.version[0] == "2"; + + /* register specific locale function */ + lunr.th = function() { + this.pipeline.reset(); + this.pipeline.add( + /*lunr.th.stopWordFilter,*/ + lunr.th.trimmer + ); + + if (isLunr2) { // for lunr version 2.0.0 + this.tokenizer = lunr.th.tokenizer; + } else { + if (lunr.tokenizer) { // for lunr version 0.6.0 + lunr.tokenizer = lunr.th.tokenizer; + } + if (this.tokenizerFn) { // for lunr version 0.7.0 -> 1.0.0 + this.tokenizerFn = lunr.th.tokenizer; + } + } + }; + + /* lunr trimmer function */ + lunr.th.wordCharacters = "[\u0e00-\u0e7f]"; + lunr.th.trimmer = lunr.trimmerSupport.generateTrimmer(lunr.th.wordCharacters); + lunr.Pipeline.registerFunction(lunr.th.trimmer, 'trimmer-th'); + + var segmenter = lunr.wordcut; + segmenter.init(); + lunr.th.tokenizer = function (obj) { + //console.log(obj); + if (!arguments.length || obj == null || obj == undefined) return [] + if (Array.isArray(obj)) return obj.map(function (t) { return isLunr2 ? new lunr.Token(t) : t }) + + var str = obj.toString().replace(/^\s+/, ''); + return segmenter.cut(str).split('|'); + } + }; +})) -- cgit v1.2.3