sensemaking 0.23.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -9
- package/dist/cjs/cli/index.d.cts +1 -1
- package/dist/cjs/cli/index.d.ts +1 -1
- package/dist/cjs/cli/index.js +1 -1
- package/dist/cjs/cli/index.js.map +1 -1
- package/dist/cjs/cli/named.js +6 -2
- package/dist/cjs/cli/named.js.map +1 -1
- package/dist/cjs/cli/search.js +6 -2
- package/dist/cjs/cli/search.js.map +1 -1
- package/dist/cjs/cli/shared.d.cts +2 -0
- package/dist/cjs/cli/shared.d.ts +2 -0
- package/dist/cjs/cli/shared.js +24 -0
- package/dist/cjs/cli/shared.js.map +1 -1
- package/dist/cjs/commands/map.js +2 -2
- package/dist/cjs/commands/map.js.map +1 -1
- package/dist/cjs/commands/search.d.cts +10 -0
- package/dist/cjs/commands/search.d.ts +10 -0
- package/dist/cjs/commands/search.js +488 -180
- package/dist/cjs/commands/search.js.map +1 -1
- package/dist/cjs/output/output.js +45 -8
- package/dist/cjs/output/output.js.map +1 -1
- package/dist/cjs/output/search-error.d.cts +1 -0
- package/dist/cjs/output/search-error.d.ts +1 -0
- package/dist/cjs/output/search-error.js +28 -4
- package/dist/cjs/output/search-error.js.map +1 -1
- package/dist/cjs/scan/frontmatter.js +1 -1
- package/dist/cjs/scan/frontmatter.js.map +1 -1
- package/dist/cjs/scan/index.js +1 -0
- package/dist/cjs/scan/index.js.map +1 -1
- package/dist/cjs/store/batch.d.cts +4 -0
- package/dist/cjs/store/batch.d.ts +4 -0
- package/dist/cjs/store/batch.js +80 -0
- package/dist/cjs/store/batch.js.map +1 -0
- package/dist/cjs/store/duckdb/batch.d.cts +0 -4
- package/dist/cjs/store/duckdb/batch.d.ts +0 -4
- package/dist/cjs/store/duckdb/batch.js +5 -27
- package/dist/cjs/store/duckdb/batch.js.map +1 -1
- package/dist/cjs/store/duckdb/fieldStats.js +4 -7
- package/dist/cjs/store/duckdb/fieldStats.js.map +1 -1
- package/dist/cjs/store/duckdb/lexical.d.cts +2 -2
- package/dist/cjs/store/duckdb/lexical.d.ts +2 -2
- package/dist/cjs/store/duckdb/lexical.js +215 -64
- package/dist/cjs/store/duckdb/lexical.js.map +1 -1
- package/dist/cjs/store/duckdb/reconcile.js +7 -2
- package/dist/cjs/store/duckdb/reconcile.js.map +1 -1
- package/dist/cjs/store/duckdb/store.js +1 -3
- package/dist/cjs/store/duckdb/store.js.map +1 -1
- package/dist/cjs/store/duckdb/vectors.js +13 -8
- package/dist/cjs/store/duckdb/vectors.js.map +1 -1
- package/dist/cjs/store/native.js +5 -4
- package/dist/cjs/store/native.js.map +1 -1
- package/dist/cjs/store/open.js +7 -0
- package/dist/cjs/store/open.js.map +1 -1
- package/dist/cjs/store/shared.js.map +1 -1
- package/dist/cjs/store/sqlite/lexical.js +1 -4
- package/dist/cjs/store/sqlite/lexical.js.map +1 -1
- package/dist/cjs/store/sqlite/store.js +1 -4
- package/dist/cjs/store/sqlite/store.js.map +1 -1
- package/dist/cjs/store/sqlite/vectors.js +78 -24
- package/dist/cjs/store/sqlite/vectors.js.map +1 -1
- package/dist/cjs/store/turso/connection.d.cts +3 -0
- package/dist/cjs/store/turso/connection.d.ts +3 -0
- package/dist/cjs/store/turso/connection.js +302 -31
- package/dist/cjs/store/turso/connection.js.map +1 -1
- package/dist/cjs/store/turso/lexical-text.d.cts +1 -0
- package/dist/cjs/store/turso/lexical-text.d.ts +1 -0
- package/dist/cjs/store/turso/lexical-text.js +40 -0
- package/dist/cjs/store/turso/lexical-text.js.map +1 -0
- package/dist/cjs/store/turso/lexical.js +89 -16
- package/dist/cjs/store/turso/lexical.js.map +1 -1
- package/dist/cjs/store/turso/native.d.cts +4 -0
- package/dist/cjs/store/turso/native.d.ts +4 -0
- package/dist/cjs/store/turso/native.js +9 -0
- package/dist/cjs/store/turso/native.js.map +1 -1
- package/dist/cjs/store/turso/open.d.cts +1 -1
- package/dist/cjs/store/turso/open.d.ts +1 -1
- package/dist/cjs/store/turso/open.js +83 -10
- package/dist/cjs/store/turso/open.js.map +1 -1
- package/dist/cjs/store/turso/reconcile.d.cts +1 -1
- package/dist/cjs/store/turso/reconcile.d.ts +1 -1
- package/dist/cjs/store/turso/reconcile.js +6 -2
- package/dist/cjs/store/turso/reconcile.js.map +1 -1
- package/dist/cjs/store/turso/sql-functions.d.cts +1 -0
- package/dist/cjs/store/turso/sql-functions.d.ts +1 -0
- package/dist/cjs/store/turso/sql-functions.js +174 -0
- package/dist/cjs/store/turso/sql-functions.js.map +1 -0
- package/dist/cjs/store/turso/store.js +105 -4
- package/dist/cjs/store/turso/store.js.map +1 -1
- package/dist/cjs/store/turso/vectors.js +50 -14
- package/dist/cjs/store/turso/vectors.js.map +1 -1
- package/dist/cjs/store/types.d.cts +1 -2
- package/dist/cjs/store/types.d.ts +1 -2
- package/dist/cjs/store/types.js +1 -4
- package/dist/cjs/store/types.js.map +1 -1
- package/dist/cjs/store/vectors.d.cts +7 -0
- package/dist/cjs/store/vectors.d.ts +7 -0
- package/dist/cjs/store/vectors.js +8 -0
- package/dist/cjs/store/vectors.js.map +1 -1
- package/dist/cjs/text/segment.d.cts +13 -0
- package/dist/cjs/text/segment.d.ts +13 -0
- package/dist/cjs/text/segment.js +109 -4
- package/dist/cjs/text/segment.js.map +1 -1
- package/dist/esm/cli/index.d.ts +1 -1
- package/dist/esm/cli/index.js +1 -1
- package/dist/esm/cli/index.js.map +1 -1
- package/dist/esm/cli/named.js +6 -2
- package/dist/esm/cli/named.js.map +1 -1
- package/dist/esm/cli/search.js +5 -1
- package/dist/esm/cli/search.js.map +1 -1
- package/dist/esm/cli/shared.d.ts +2 -0
- package/dist/esm/cli/shared.js +19 -0
- package/dist/esm/cli/shared.js.map +1 -1
- package/dist/esm/commands/map.js +2 -2
- package/dist/esm/commands/map.js.map +1 -1
- package/dist/esm/commands/search.d.ts +10 -0
- package/dist/esm/commands/search.js +271 -91
- package/dist/esm/commands/search.js.map +1 -1
- package/dist/esm/output/output.js +27 -4
- package/dist/esm/output/output.js.map +1 -1
- package/dist/esm/output/search-error.d.ts +1 -0
- package/dist/esm/output/search-error.js +17 -1
- package/dist/esm/output/search-error.js.map +1 -1
- package/dist/esm/scan/frontmatter.js +1 -1
- package/dist/esm/scan/frontmatter.js.map +1 -1
- package/dist/esm/scan/index.js +1 -0
- package/dist/esm/scan/index.js.map +1 -1
- package/dist/esm/store/batch.d.ts +4 -0
- package/dist/esm/store/batch.js +21 -0
- package/dist/esm/store/batch.js.map +1 -0
- package/dist/esm/store/duckdb/batch.d.ts +0 -4
- package/dist/esm/store/duckdb/batch.js +2 -19
- package/dist/esm/store/duckdb/batch.js.map +1 -1
- package/dist/esm/store/duckdb/fieldStats.js +4 -7
- package/dist/esm/store/duckdb/fieldStats.js.map +1 -1
- package/dist/esm/store/duckdb/lexical.d.ts +2 -2
- package/dist/esm/store/duckdb/lexical.js +94 -40
- package/dist/esm/store/duckdb/lexical.js.map +1 -1
- package/dist/esm/store/duckdb/reconcile.js +2 -2
- package/dist/esm/store/duckdb/reconcile.js.map +1 -1
- package/dist/esm/store/duckdb/store.js +2 -4
- package/dist/esm/store/duckdb/store.js.map +1 -1
- package/dist/esm/store/duckdb/vectors.js +26 -13
- package/dist/esm/store/duckdb/vectors.js.map +1 -1
- package/dist/esm/store/native.js +5 -4
- package/dist/esm/store/native.js.map +1 -1
- package/dist/esm/store/open.js +7 -0
- package/dist/esm/store/open.js.map +1 -1
- package/dist/esm/store/shared.js +1 -2
- package/dist/esm/store/shared.js.map +1 -1
- package/dist/esm/store/sqlite/lexical.js +2 -5
- package/dist/esm/store/sqlite/lexical.js.map +1 -1
- package/dist/esm/store/sqlite/store.js +1 -4
- package/dist/esm/store/sqlite/store.js.map +1 -1
- package/dist/esm/store/sqlite/vectors.js +48 -19
- package/dist/esm/store/sqlite/vectors.js.map +1 -1
- package/dist/esm/store/turso/connection.d.ts +3 -0
- package/dist/esm/store/turso/connection.js +61 -5
- package/dist/esm/store/turso/connection.js.map +1 -1
- package/dist/esm/store/turso/lexical-text.d.ts +1 -0
- package/dist/esm/store/turso/lexical-text.js +12 -0
- package/dist/esm/store/turso/lexical-text.js.map +1 -0
- package/dist/esm/store/turso/lexical.js +56 -21
- package/dist/esm/store/turso/lexical.js.map +1 -1
- package/dist/esm/store/turso/native.d.ts +4 -0
- package/dist/esm/store/turso/native.js +8 -0
- package/dist/esm/store/turso/native.js.map +1 -1
- package/dist/esm/store/turso/open.d.ts +1 -1
- package/dist/esm/store/turso/open.js +7 -7
- package/dist/esm/store/turso/open.js.map +1 -1
- package/dist/esm/store/turso/reconcile.d.ts +1 -1
- package/dist/esm/store/turso/reconcile.js +6 -2
- package/dist/esm/store/turso/reconcile.js.map +1 -1
- package/dist/esm/store/turso/sql-functions.d.ts +1 -0
- package/dist/esm/store/turso/sql-functions.js +179 -0
- package/dist/esm/store/turso/sql-functions.js.map +1 -0
- package/dist/esm/store/turso/store.js +32 -7
- package/dist/esm/store/turso/store.js.map +1 -1
- package/dist/esm/store/turso/vectors.js +19 -10
- package/dist/esm/store/turso/vectors.js.map +1 -1
- package/dist/esm/store/types.d.ts +1 -2
- package/dist/esm/store/types.js +6 -8
- package/dist/esm/store/types.js.map +1 -1
- package/dist/esm/store/vectors.d.ts +7 -0
- package/dist/esm/store/vectors.js +8 -2
- package/dist/esm/store/vectors.js.map +1 -1
- package/dist/esm/text/segment.d.ts +13 -0
- package/dist/esm/text/segment.js +70 -0
- package/dist/esm/text/segment.js.map +1 -1
- package/package.json +4 -3
- package/schema.json +1 -1
- package/skills/sense/EXAMPLES.md +3 -3
- package/skills/sense/SKILL.md +6 -6
- package/skills/sense-setup/SKILL.md +1 -1
|
@@ -2,18 +2,40 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get SNIPPET_CHAR_LIMIT_DEFAULT () {
|
|
13
|
+
return SNIPPET_CHAR_LIMIT_DEFAULT;
|
|
14
|
+
},
|
|
15
|
+
get SNIPPET_COUNT_LIMIT_DEFAULT () {
|
|
16
|
+
return SNIPPET_COUNT_LIMIT_DEFAULT;
|
|
17
|
+
},
|
|
18
|
+
get computeSnippets () {
|
|
19
|
+
return computeSnippets;
|
|
20
|
+
},
|
|
21
|
+
get hydrateSearchRows () {
|
|
22
|
+
return hydrateSearchRows;
|
|
23
|
+
},
|
|
24
|
+
get lineNumberAt () {
|
|
25
|
+
return lineNumberAt;
|
|
26
|
+
},
|
|
27
|
+
get search () {
|
|
8
28
|
return search;
|
|
9
29
|
}
|
|
10
30
|
});
|
|
11
31
|
var _nodefs = require("node:fs");
|
|
12
32
|
var _nodepath = require("node:path");
|
|
33
|
+
var _stemmer = require("stemmer");
|
|
13
34
|
var _indexts = require("../config/index.js");
|
|
14
35
|
var _storets = require("../embed/store.js");
|
|
15
36
|
var _errorsts = require("../errors.js");
|
|
16
37
|
var _searcherrorts = require("../output/search-error.js");
|
|
38
|
+
var _segmentts = require("../text/segment.js");
|
|
17
39
|
var _scopets = require("./scope.js");
|
|
18
40
|
var _signalsts = require("./signals.js");
|
|
19
41
|
function _array_like_to_array(arr, len) {
|
|
@@ -201,40 +223,153 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
201
223
|
if (n === "Map" || n === "Set") return Array.from(n);
|
|
202
224
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
203
225
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
//
|
|
208
|
-
// scan matches the same words the query matched on, not FTS5 syntax.
|
|
226
|
+
var SNIPPET_CHAR_LIMIT_DEFAULT = 80;
|
|
227
|
+
var SNIPPET_COUNT_LIMIT_DEFAULT = 1;
|
|
228
|
+
// Bare terms from an FTS5 query string: strips operators/quoting, not real terms, so the
|
|
229
|
+
// snippet scan matches what the query matched -- FTS5 operators are uppercase-only, so this is too.
|
|
209
230
|
function extractBareTerms(query) {
|
|
210
|
-
var cleaned = query.replace(/"/g, ' ').replace(/[()*]/g, ' ').replace(/\b(AND|OR|NOT|NEAR)\b(\/\d+)?/
|
|
231
|
+
var cleaned = query.replace(/"/g, ' ').replace(/[()*]/g, ' ').replace(/\b(AND|OR|NOT|NEAR)\b(\/\d+)?/g, ' ');
|
|
211
232
|
return cleaned.split(/\s+/).map(function(tok) {
|
|
212
233
|
return tok.replace(/^[A-Za-z_]\w*:/, '');
|
|
213
234
|
}) // column filter, e.g. title:term
|
|
214
|
-
.
|
|
235
|
+
.flatMap(function(tok) {
|
|
236
|
+
return (0, _segmentts.searchTokens)(tok).map(function(param) {
|
|
237
|
+
var text = param.text;
|
|
238
|
+
return text;
|
|
239
|
+
});
|
|
240
|
+
}).map(function(tok) {
|
|
215
241
|
return tok.toLowerCase().trim();
|
|
216
242
|
}).filter(function(tok) {
|
|
217
243
|
return tok.length > 0;
|
|
218
244
|
});
|
|
219
245
|
}
|
|
220
|
-
|
|
246
|
+
// House convention (src/chunk/group.ts): Intl.Segmenter word boundaries, not a bare \b, which
|
|
247
|
+
// is ASCII-only. Built on first use: construction is a few ms, paid only when a term matches.
|
|
248
|
+
var wordSegmenter;
|
|
249
|
+
function findOccurrences(text, terms) {
|
|
221
250
|
var occ = [];
|
|
222
|
-
var
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
251
|
+
var textLower = text.toLowerCase();
|
|
252
|
+
// Unspaced scripts (UNSPACED_SCRIPTS) mark no word boundaries: the sense-setup skill promises
|
|
253
|
+
// substring semantics there, so a matching term is found wherever it occurs in the run.
|
|
254
|
+
var unspacedTerms = terms.filter(_segmentts.hasUnspacedRun);
|
|
255
|
+
if (unspacedTerms.length > 0) {
|
|
256
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
257
|
+
try {
|
|
258
|
+
for(var _iterator = (0, _segmentts.unspacedRuns)(text)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
259
|
+
var run = _step.value;
|
|
260
|
+
var runLower = textLower.slice(run.start, run.end);
|
|
261
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
262
|
+
try {
|
|
263
|
+
for(var _iterator1 = unspacedTerms[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
264
|
+
var term = _step1.value;
|
|
265
|
+
var idx = 0;
|
|
266
|
+
for(;;){
|
|
267
|
+
var found = runLower.indexOf(term, idx);
|
|
268
|
+
if (found === -1) break;
|
|
269
|
+
occ.push({
|
|
270
|
+
start: run.start + found,
|
|
271
|
+
end: run.start + found + term.length,
|
|
272
|
+
term: term
|
|
273
|
+
});
|
|
274
|
+
idx = found + term.length;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
} catch (err) {
|
|
278
|
+
_didIteratorError1 = true;
|
|
279
|
+
_iteratorError1 = err;
|
|
280
|
+
} finally{
|
|
281
|
+
try {
|
|
282
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
283
|
+
_iterator1.return();
|
|
284
|
+
}
|
|
285
|
+
} finally{
|
|
286
|
+
if (_didIteratorError1) {
|
|
287
|
+
throw _iteratorError1;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
} catch (err) {
|
|
293
|
+
_didIteratorError = true;
|
|
294
|
+
_iteratorError = err;
|
|
295
|
+
} finally{
|
|
296
|
+
try {
|
|
297
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
298
|
+
_iterator.return();
|
|
299
|
+
}
|
|
300
|
+
} finally{
|
|
301
|
+
if (_didIteratorError) {
|
|
302
|
+
throw _iteratorError;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// Spaced scripts: a word is marked when its porter stem equals a query term's stem, the same
|
|
308
|
+
// algorithm both indexes tokenize with (sqlite's TOKENIZE = 'porter unicode61'; duckdb's fts default).
|
|
309
|
+
var spacedTerms = terms.filter(function(t) {
|
|
310
|
+
return !(0, _segmentts.hasUnspacedRun)(t);
|
|
311
|
+
});
|
|
312
|
+
if (spacedTerms.length > 0) {
|
|
313
|
+
var termByStem = new Map(spacedTerms.map(function(t) {
|
|
314
|
+
return [
|
|
315
|
+
(0, _stemmer.stemmer)((0, _segmentts.foldForSearch)(t)),
|
|
316
|
+
t
|
|
317
|
+
];
|
|
318
|
+
}));
|
|
319
|
+
var stemInitials = new Set(Array.from(termByStem.keys(), function(term) {
|
|
320
|
+
return term[0];
|
|
321
|
+
}));
|
|
322
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
|
|
323
|
+
try {
|
|
324
|
+
for(var _iterator2 = (0, _segmentts.searchTokens)(text)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
|
|
325
|
+
var match = _step2.value;
|
|
326
|
+
var segment = match.text;
|
|
327
|
+
if (match.unspaced) continue;
|
|
328
|
+
var folded = (0, _segmentts.foldForSearch)(segment);
|
|
329
|
+
// Porter stemming changes suffixes only, so a different initial cannot match a query stem.
|
|
330
|
+
if (!stemInitials.has(folded[0])) continue;
|
|
331
|
+
var term1 = termByStem.get((0, _stemmer.stemmer)(folded));
|
|
332
|
+
if (term1 !== undefined) occ.push({
|
|
333
|
+
start: match.start,
|
|
334
|
+
end: match.end,
|
|
335
|
+
term: term1
|
|
234
336
|
});
|
|
235
|
-
|
|
337
|
+
}
|
|
338
|
+
} catch (err) {
|
|
339
|
+
_didIteratorError2 = true;
|
|
340
|
+
_iteratorError2 = err;
|
|
341
|
+
} finally{
|
|
342
|
+
try {
|
|
343
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
344
|
+
_iterator2.return();
|
|
345
|
+
}
|
|
346
|
+
} finally{
|
|
347
|
+
if (_didIteratorError2) {
|
|
348
|
+
throw _iteratorError2;
|
|
349
|
+
}
|
|
236
350
|
}
|
|
237
351
|
}
|
|
352
|
+
}
|
|
353
|
+
return occ.sort(function(a, b) {
|
|
354
|
+
return a.start - b.start || b.end - a.end;
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
// Segment boundaries of the whole text, word granularity: the only cut points a snippet edge
|
|
358
|
+
// may land on. One rule for every script (DESIGN.md "Cutting") -- a regex \b is ASCII-only and
|
|
359
|
+
// would mis-cut Japanese, Chinese and Thai, which Intl.Segmenter divides by dictionary instead.
|
|
360
|
+
function wordBoundaries(text) {
|
|
361
|
+
wordSegmenter !== null && wordSegmenter !== void 0 ? wordSegmenter : wordSegmenter = new Intl.Segmenter('en', {
|
|
362
|
+
granularity: 'word'
|
|
363
|
+
});
|
|
364
|
+
var bounds = [
|
|
365
|
+
0
|
|
366
|
+
];
|
|
367
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
368
|
+
try {
|
|
369
|
+
for(var _iterator = wordSegmenter.segment(text)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
370
|
+
var _step_value = _step.value, index = _step_value.index, segment = _step_value.segment;
|
|
371
|
+
bounds.push(index + segment.length);
|
|
372
|
+
}
|
|
238
373
|
} catch (err) {
|
|
239
374
|
_didIteratorError = true;
|
|
240
375
|
_iteratorError = err;
|
|
@@ -249,61 +384,164 @@ function findOccurrences(haystackLower, terms) {
|
|
|
249
384
|
}
|
|
250
385
|
}
|
|
251
386
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
387
|
+
return bounds;
|
|
388
|
+
}
|
|
389
|
+
// bounds is sorted: snaps are binary searches, since each runs once per candidate window.
|
|
390
|
+
function snapForward(bounds, pos) {
|
|
391
|
+
var lo = 0;
|
|
392
|
+
var hi = bounds.length - 1;
|
|
393
|
+
while(lo < hi){
|
|
394
|
+
var mid = lo + hi >> 1;
|
|
395
|
+
if (bounds[mid] < pos) lo = mid + 1;
|
|
396
|
+
else hi = mid;
|
|
397
|
+
}
|
|
398
|
+
return bounds[lo];
|
|
399
|
+
}
|
|
400
|
+
function snapBackward(bounds, pos) {
|
|
401
|
+
var lo = 0;
|
|
402
|
+
var hi = bounds.length - 1;
|
|
403
|
+
var result = bounds[0];
|
|
404
|
+
while(lo < hi){
|
|
405
|
+
var mid = lo + hi + 1 >> 1;
|
|
406
|
+
if (bounds[mid] <= pos) {
|
|
407
|
+
lo = mid;
|
|
408
|
+
result = bounds[mid];
|
|
409
|
+
} else hi = mid - 1;
|
|
410
|
+
}
|
|
411
|
+
return result;
|
|
412
|
+
}
|
|
413
|
+
function firstBoundAfter(bounds, pos) {
|
|
414
|
+
var lo = 0;
|
|
415
|
+
var hi = bounds.length;
|
|
416
|
+
while(lo < hi){
|
|
417
|
+
var mid = lo + hi >> 1;
|
|
418
|
+
if (bounds[mid] <= pos) lo = mid + 1;
|
|
419
|
+
else hi = mid;
|
|
420
|
+
}
|
|
421
|
+
return bounds[lo];
|
|
422
|
+
}
|
|
423
|
+
// A raw, unmarked upper bound: [start, end) inside [anchor, anchor+charLimit), edges on
|
|
424
|
+
// boundaries. Markup (guillemets, ellipses) added on top of this can push the rendered result
|
|
425
|
+
// past charLimit, which is what fitEnd() below corrects for; this is only the starting guess.
|
|
426
|
+
// A single segment spanning the whole target window (a word longer than the char limit) is the
|
|
427
|
+
// one case where holding the boundary rule means the budget is not a hard ceiling.
|
|
428
|
+
function cutWindow(text, bounds, anchor, charLimit) {
|
|
429
|
+
var _firstBoundAfter;
|
|
430
|
+
var rawEnd = Math.min(text.length, anchor + charLimit);
|
|
431
|
+
var start = snapForward(bounds, anchor);
|
|
432
|
+
var end = snapBackward(bounds, rawEnd);
|
|
433
|
+
if (end <= start) end = (_firstBoundAfter = firstBoundAfter(bounds, start)) !== null && _firstBoundAfter !== void 0 ? _firstBoundAfter : text.length;
|
|
434
|
+
return {
|
|
435
|
+
start: start,
|
|
436
|
+
end: Math.min(end, text.length)
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
// The largest boundary <= upperBound, > floor, whose rendered [*, end) fits charLimit. Markup
|
|
440
|
+
// only ever adds characters as end grows, so rendered length is non-decreasing in end and
|
|
441
|
+
// shrinking from upperBound is guaranteed to find the true fit rather than guess at it.
|
|
442
|
+
// `floor` is the one end this never shrinks past (the anchor's own marked word, or the first
|
|
443
|
+
// word in the unmarked fallback): DESIGN.md's budget is a ceiling except here, where returning
|
|
444
|
+
// nothing is worse than a single word that overruns it.
|
|
445
|
+
function fitEnd(render, bounds, floor, upperBound, charLimit) {
|
|
446
|
+
var lo = 0;
|
|
447
|
+
var hi = bounds.length - 1;
|
|
448
|
+
while(lo < hi){
|
|
449
|
+
var mid = lo + hi + 1 >> 1;
|
|
450
|
+
if (bounds[mid] <= upperBound) lo = mid;
|
|
451
|
+
else hi = mid - 1;
|
|
452
|
+
}
|
|
453
|
+
for(; lo >= 0 && bounds[lo] > floor; lo--){
|
|
454
|
+
if (render(bounds[lo]).length <= charLimit) return bounds[lo];
|
|
455
|
+
}
|
|
456
|
+
return floor;
|
|
257
457
|
}
|
|
258
|
-
//
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
var
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
458
|
+
// occ is start-sorted: a window's first candidate occurrence is a binary search, not a walk.
|
|
459
|
+
function firstOccAtOrAfter(occ, pos) {
|
|
460
|
+
var lo = 0;
|
|
461
|
+
var hi = occ.length;
|
|
462
|
+
while(lo < hi){
|
|
463
|
+
var mid = lo + hi >> 1;
|
|
464
|
+
if (occ[mid].start < pos) lo = mid + 1;
|
|
465
|
+
else hi = mid;
|
|
466
|
+
}
|
|
467
|
+
return lo;
|
|
468
|
+
}
|
|
469
|
+
function renderWindow(text, occ, win) {
|
|
470
|
+
var out = '';
|
|
471
|
+
var cursor = win.start;
|
|
472
|
+
for(var i = firstOccAtOrAfter(occ, win.start); i < occ.length && occ[i].start < win.end; i++){
|
|
473
|
+
var o = occ[i];
|
|
474
|
+
if (o.end > win.end) continue;
|
|
475
|
+
// Occurrences of duplicate or substring-overlapping terms ("test tests") can overlap;
|
|
476
|
+
// emitting each would duplicate document text. Keep the first, absorb the rest.
|
|
477
|
+
if (o.start < cursor) continue;
|
|
478
|
+
out += "".concat(text.slice(cursor, o.start), "\xab").concat(text.slice(o.start, o.end), "\xbb");
|
|
479
|
+
cursor = o.end;
|
|
480
|
+
}
|
|
481
|
+
out += text.slice(cursor, win.end);
|
|
482
|
+
var prefix = win.start > 0 ? '…' : '';
|
|
483
|
+
var suffix = win.end < text.length ? '…' : '';
|
|
484
|
+
return "".concat(prefix).concat(out.replace(/\s+/g, ' ')).concat(suffix);
|
|
485
|
+
}
|
|
486
|
+
// Scores every occurrence-anchored candidate window: most distinct terms wins, ties broken by
|
|
487
|
+
// most total hits -- coverage now that occurrences are real words, not the false-fragment counts
|
|
488
|
+
// a substring scan produced. Selection itself is unevaluated (DESIGN.md "Selection, unsettled").
|
|
489
|
+
// The window's `end` is fitted to the *rendered* text, markup included, not the raw span: a
|
|
490
|
+
// window dense with marks (every guillemet pair adds two characters) shrinks to fit the same
|
|
491
|
+
// budget a sparse one fills almost exactly.
|
|
492
|
+
function scoreWindows(occ, bounds, text, charLimit) {
|
|
493
|
+
var _loop = function(i) {
|
|
494
|
+
var winEnd = occ[i].start + charLimit;
|
|
266
495
|
var seen = new Set();
|
|
267
496
|
var count = 0;
|
|
268
497
|
for(var j = i; j < occ.length && occ[j].start < winEnd; j++){
|
|
269
498
|
seen.add(occ[j].term);
|
|
270
499
|
count++;
|
|
271
500
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
501
|
+
var start = snapForward(bounds, occ[i].start);
|
|
502
|
+
var floor = Math.max(start, occ[i].end);
|
|
503
|
+
var upperBound = Math.max(floor, cutWindow(text, bounds, occ[i].start, charLimit).end);
|
|
504
|
+
var end = fitEnd(function(e) {
|
|
505
|
+
return renderWindow(text, occ, {
|
|
506
|
+
start: start,
|
|
507
|
+
end: e
|
|
508
|
+
});
|
|
509
|
+
}, bounds, floor, upperBound, charLimit);
|
|
510
|
+
candidates.push({
|
|
511
|
+
start: start,
|
|
512
|
+
end: end,
|
|
513
|
+
distinct: seen.size,
|
|
514
|
+
count: count
|
|
515
|
+
});
|
|
516
|
+
};
|
|
517
|
+
var candidates = [];
|
|
518
|
+
for(var i = 0; i < occ.length; i++)_loop(i);
|
|
519
|
+
return candidates;
|
|
279
520
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
return
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
};
|
|
292
|
-
}
|
|
293
|
-
var start = bestWindowStart(occ, EXCERPT_WINDOW);
|
|
294
|
-
var end1 = Math.min(text.length, start + EXCERPT_WINDOW);
|
|
295
|
-
var out = '';
|
|
296
|
-
var cursor = start;
|
|
521
|
+
function overlaps(a, b) {
|
|
522
|
+
return a.start < b.end && b.start < a.end;
|
|
523
|
+
}
|
|
524
|
+
// Same scoring function as a single snippet, kept rather than discarded (DESIGN.md "Several
|
|
525
|
+
// snippets per note"): rank by score, take the top non-overlapping windows, then reorder to the
|
|
526
|
+
// note's own order, since several passages from one note read as an abridged note.
|
|
527
|
+
function selectWindows(candidates, countLimit) {
|
|
528
|
+
var ranked = candidates.slice().sort(function(a, b) {
|
|
529
|
+
return b.distinct - a.distinct || b.count - a.count;
|
|
530
|
+
});
|
|
531
|
+
var chosen = [];
|
|
297
532
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
298
533
|
try {
|
|
299
|
-
|
|
300
|
-
var
|
|
301
|
-
if (
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
534
|
+
var _loop = function() {
|
|
535
|
+
var c = _step.value;
|
|
536
|
+
if (chosen.length >= countLimit) return "break";
|
|
537
|
+
if (chosen.some(function(s) {
|
|
538
|
+
return overlaps(s, c);
|
|
539
|
+
})) return "continue";
|
|
540
|
+
chosen.push(c);
|
|
541
|
+
};
|
|
542
|
+
for(var _iterator = ranked[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
543
|
+
var _ret = _loop();
|
|
544
|
+
if (_ret === "break") break;
|
|
307
545
|
}
|
|
308
546
|
} catch (err) {
|
|
309
547
|
_didIteratorError = true;
|
|
@@ -319,12 +557,43 @@ function computeExcerpt(text, terms) {
|
|
|
319
557
|
}
|
|
320
558
|
}
|
|
321
559
|
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
560
|
+
chosen.sort(function(a, b) {
|
|
561
|
+
return a.start - b.start;
|
|
562
|
+
});
|
|
563
|
+
return {
|
|
564
|
+
chosen: chosen,
|
|
565
|
+
best: ranked[0]
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
function computeSnippets(text, terms, charLimit, countLimit) {
|
|
569
|
+
var occ = findOccurrences(text, terms);
|
|
570
|
+
var bounds = wordBoundaries(text);
|
|
571
|
+
if (occ.length === 0) {
|
|
572
|
+
var _bounds_find;
|
|
573
|
+
// A term matched only via title/summary, not this body text, finds no occurrence here;
|
|
574
|
+
// fall back to the doc's start, unmarked.
|
|
575
|
+
var render = function render(end) {
|
|
576
|
+
return "".concat(text.slice(0, end).replace(/\s+/g, ' ').trim()).concat(end < text.length ? '…' : '');
|
|
577
|
+
};
|
|
578
|
+
var floor = (_bounds_find = bounds.find(function(b) {
|
|
579
|
+
return b > 0;
|
|
580
|
+
})) !== null && _bounds_find !== void 0 ? _bounds_find : text.length;
|
|
581
|
+
var upperBound = Math.max(floor, cutWindow(text, bounds, 0, charLimit).end);
|
|
582
|
+
var end = fitEnd(render, bounds, floor, upperBound, charLimit);
|
|
583
|
+
return {
|
|
584
|
+
snippets: [
|
|
585
|
+
render(end)
|
|
586
|
+
],
|
|
587
|
+
offset: 0
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
var candidates = scoreWindows(occ, bounds, text, charLimit);
|
|
591
|
+
var _selectWindows = selectWindows(candidates, countLimit), chosen = _selectWindows.chosen, best = _selectWindows.best;
|
|
325
592
|
return {
|
|
326
|
-
|
|
327
|
-
|
|
593
|
+
snippets: chosen.map(function(win) {
|
|
594
|
+
return renderWindow(text, occ, win);
|
|
595
|
+
}),
|
|
596
|
+
offset: best.start
|
|
328
597
|
};
|
|
329
598
|
}
|
|
330
599
|
function lineNumberAt(text, offset) {
|
|
@@ -358,9 +627,119 @@ function lineRangeFor(store, path, line) {
|
|
|
358
627
|
});
|
|
359
628
|
})();
|
|
360
629
|
}
|
|
630
|
+
function hydrateSearchRows(_0, _1, _2, _3, _4) {
|
|
631
|
+
return _async_to_generator(function(store, cfg, rows, matchedPaths, terms) {
|
|
632
|
+
var opts, _opts_snippetCharLimit, _opts_snippetCountLimit, bareTerms, charLimit, countLimit, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, row, text, _computeSnippets, snippets, offset, _tmp, err;
|
|
633
|
+
var _arguments = arguments;
|
|
634
|
+
return _ts_generator(this, function(_state) {
|
|
635
|
+
switch(_state.label){
|
|
636
|
+
case 0:
|
|
637
|
+
opts = _arguments.length > 5 && _arguments[5] !== void 0 ? _arguments[5] : {};
|
|
638
|
+
if (matchedPaths.size === 0) return [
|
|
639
|
+
2
|
|
640
|
+
];
|
|
641
|
+
bareTerms = extractBareTerms(terms);
|
|
642
|
+
charLimit = (_opts_snippetCharLimit = opts.snippetCharLimit) !== null && _opts_snippetCharLimit !== void 0 ? _opts_snippetCharLimit : SNIPPET_CHAR_LIMIT_DEFAULT;
|
|
643
|
+
countLimit = (_opts_snippetCountLimit = opts.snippetCountLimit) !== null && _opts_snippetCountLimit !== void 0 ? _opts_snippetCountLimit : SNIPPET_COUNT_LIMIT_DEFAULT;
|
|
644
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
645
|
+
_state.label = 1;
|
|
646
|
+
case 1:
|
|
647
|
+
_state.trys.push([
|
|
648
|
+
1,
|
|
649
|
+
8,
|
|
650
|
+
9,
|
|
651
|
+
10
|
|
652
|
+
]);
|
|
653
|
+
_iterator = rows[Symbol.iterator]();
|
|
654
|
+
_state.label = 2;
|
|
655
|
+
case 2:
|
|
656
|
+
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
657
|
+
3,
|
|
658
|
+
7
|
|
659
|
+
];
|
|
660
|
+
row = _step.value;
|
|
661
|
+
if (!matchedPaths.has(row.path)) return [
|
|
662
|
+
3,
|
|
663
|
+
6
|
|
664
|
+
];
|
|
665
|
+
text = void 0;
|
|
666
|
+
try {
|
|
667
|
+
text = (0, _nodefs.readFileSync)((0, _nodepath.join)(cfg.baseDir, row.path), 'utf8');
|
|
668
|
+
} catch (unused) {
|
|
669
|
+
return [
|
|
670
|
+
3,
|
|
671
|
+
6
|
|
672
|
+
]; // vanished since the match; leave snippets/lines empty rather than throw
|
|
673
|
+
}
|
|
674
|
+
_computeSnippets = computeSnippets(text, bareTerms, charLimit, countLimit), snippets = _computeSnippets.snippets, offset = _computeSnippets.offset;
|
|
675
|
+
row.snippets = snippets;
|
|
676
|
+
if (!(row.lines == null)) return [
|
|
677
|
+
3,
|
|
678
|
+
6
|
|
679
|
+
];
|
|
680
|
+
if (!(0, _indexts.featureEnabled)(cfg, 'sections')) return [
|
|
681
|
+
3,
|
|
682
|
+
4
|
|
683
|
+
];
|
|
684
|
+
return [
|
|
685
|
+
4,
|
|
686
|
+
lineRangeFor(store, row.path, lineNumberAt(text, offset))
|
|
687
|
+
];
|
|
688
|
+
case 3:
|
|
689
|
+
_tmp = _state.sent();
|
|
690
|
+
return [
|
|
691
|
+
3,
|
|
692
|
+
5
|
|
693
|
+
];
|
|
694
|
+
case 4:
|
|
695
|
+
_tmp = null;
|
|
696
|
+
_state.label = 5;
|
|
697
|
+
case 5:
|
|
698
|
+
row.lines = _tmp;
|
|
699
|
+
_state.label = 6;
|
|
700
|
+
case 6:
|
|
701
|
+
_iteratorNormalCompletion = true;
|
|
702
|
+
return [
|
|
703
|
+
3,
|
|
704
|
+
2
|
|
705
|
+
];
|
|
706
|
+
case 7:
|
|
707
|
+
return [
|
|
708
|
+
3,
|
|
709
|
+
10
|
|
710
|
+
];
|
|
711
|
+
case 8:
|
|
712
|
+
err = _state.sent();
|
|
713
|
+
_didIteratorError = true;
|
|
714
|
+
_iteratorError = err;
|
|
715
|
+
return [
|
|
716
|
+
3,
|
|
717
|
+
10
|
|
718
|
+
];
|
|
719
|
+
case 9:
|
|
720
|
+
try {
|
|
721
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
722
|
+
_iterator.return();
|
|
723
|
+
}
|
|
724
|
+
} finally{
|
|
725
|
+
if (_didIteratorError) {
|
|
726
|
+
throw _iteratorError;
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
return [
|
|
730
|
+
7
|
|
731
|
+
];
|
|
732
|
+
case 10:
|
|
733
|
+
return [
|
|
734
|
+
2
|
|
735
|
+
];
|
|
736
|
+
}
|
|
737
|
+
});
|
|
738
|
+
}).apply(this, arguments);
|
|
739
|
+
}
|
|
361
740
|
function search(_0, _1, _2) {
|
|
362
741
|
return _async_to_generator(function(store, cfg, terms) {
|
|
363
|
-
var opts, effective, k, signals, allPaths, scopePaths, scopeActive, allowedPaths, err1, fetch, wantsVectors, e, semanticEnabled, _tmp, scope, whereJoin, whereCond, scopeCond, candidates, matchRows,
|
|
742
|
+
var opts, effective, k, signals, allPaths, scopePaths, scopeActive, allowedPaths, err1, fetch, wantsVectors, e, semanticEnabled, _tmp, scope, whereJoin, whereCond, scopeCond, candidates, matchRows, hasEmptyPhrase, hasBareSyntaxOnly, syntaxError, err2, matchedPaths, chunkLines, chunkSimilarity, ref, where, similarityCol, selectStmt, rows, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, row;
|
|
364
743
|
var _arguments = arguments;
|
|
365
744
|
return _ts_generator(this, function(_state) {
|
|
366
745
|
switch(_state.label){
|
|
@@ -454,10 +833,16 @@ function search(_0, _1, _2) {
|
|
|
454
833
|
scopeCond = scopeActive ? 'AND content.path IN (SELECT "path" FROM _search_scope)' : '';
|
|
455
834
|
candidates = new Map();
|
|
456
835
|
matchRows = [];
|
|
457
|
-
|
|
836
|
+
hasEmptyPhrase = _to_consumable_array(terms.matchAll(/"([^"]*)"/g)).some(function(match) {
|
|
837
|
+
return !RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088F\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5C-\\u0C5D\\u0C60-\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDC-\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C8A\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5-\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183-\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3006\\u3031-\\u3035\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7DC\\uA7F1-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u{10000}-\\u{1000B}\\u{1000D}-\\u{10026}\\u{10028}-\\u{1003A}\\u{1003C}-\\u{1003D}\\u{1003F}-\\u{1004D}\\u{10050}-\\u{1005D}\\u{10080}-\\u{100FA}\\u{10280}-\\u{1029C}\\u{102A0}-\\u{102D0}\\u{10300}-\\u{1031F}\\u{1032D}-\\u{10340}\\u{10342}-\\u{10349}\\u{10350}-\\u{10375}\\u{10380}-\\u{1039D}\\u{103A0}-\\u{103C3}\\u{103C8}-\\u{103CF}\\u{10400}-\\u{1049D}\\u{104B0}-\\u{104D3}\\u{104D8}-\\u{104FB}\\u{10500}-\\u{10527}\\u{10530}-\\u{10563}\\u{10570}-\\u{1057A}\\u{1057C}-\\u{1058A}\\u{1058C}-\\u{10592}\\u{10594}-\\u{10595}\\u{10597}-\\u{105A1}\\u{105A3}-\\u{105B1}\\u{105B3}-\\u{105B9}\\u{105BB}-\\u{105BC}\\u{105C0}-\\u{105F3}\\u{10600}-\\u{10736}\\u{10740}-\\u{10755}\\u{10760}-\\u{10767}\\u{10780}-\\u{10785}\\u{10787}-\\u{107B0}\\u{107B2}-\\u{107BA}\\u{10800}-\\u{10805}\\u{10808}\\u{1080A}-\\u{10835}\\u{10837}-\\u{10838}\\u{1083C}\\u{1083F}-\\u{10855}\\u{10860}-\\u{10876}\\u{10880}-\\u{1089E}\\u{108E0}-\\u{108F2}\\u{108F4}-\\u{108F5}\\u{10900}-\\u{10915}\\u{10920}-\\u{10939}\\u{10940}-\\u{10959}\\u{10980}-\\u{109B7}\\u{109BE}-\\u{109BF}\\u{10A00}\\u{10A10}-\\u{10A13}\\u{10A15}-\\u{10A17}\\u{10A19}-\\u{10A35}\\u{10A60}-\\u{10A7C}\\u{10A80}-\\u{10A9C}\\u{10AC0}-\\u{10AC7}\\u{10AC9}-\\u{10AE4}\\u{10B00}-\\u{10B35}\\u{10B40}-\\u{10B55}\\u{10B60}-\\u{10B72}\\u{10B80}-\\u{10B91}\\u{10C00}-\\u{10C48}\\u{10C80}-\\u{10CB2}\\u{10CC0}-\\u{10CF2}\\u{10D00}-\\u{10D23}\\u{10D4A}-\\u{10D65}\\u{10D6F}-\\u{10D85}\\u{10E80}-\\u{10EA9}\\u{10EB0}-\\u{10EB1}\\u{10EC2}-\\u{10EC7}\\u{10F00}-\\u{10F1C}\\u{10F27}\\u{10F30}-\\u{10F45}\\u{10F70}-\\u{10F81}\\u{10FB0}-\\u{10FC4}\\u{10FE0}-\\u{10FF6}\\u{11003}-\\u{11037}\\u{11071}-\\u{11072}\\u{11075}\\u{11083}-\\u{110AF}\\u{110D0}-\\u{110E8}\\u{11103}-\\u{11126}\\u{11144}\\u{11147}\\u{11150}-\\u{11172}\\u{11176}\\u{11183}-\\u{111B2}\\u{111C1}-\\u{111C4}\\u{111DA}\\u{111DC}\\u{11200}-\\u{11211}\\u{11213}-\\u{1122B}\\u{1123F}-\\u{11240}\\u{11280}-\\u{11286}\\u{11288}\\u{1128A}-\\u{1128D}\\u{1128F}-\\u{1129D}\\u{1129F}-\\u{112A8}\\u{112B0}-\\u{112DE}\\u{11305}-\\u{1130C}\\u{1130F}-\\u{11310}\\u{11313}-\\u{11328}\\u{1132A}-\\u{11330}\\u{11332}-\\u{11333}\\u{11335}-\\u{11339}\\u{1133D}\\u{11350}\\u{1135D}-\\u{11361}\\u{11380}-\\u{11389}\\u{1138B}\\u{1138E}\\u{11390}-\\u{113B5}\\u{113B7}\\u{113D1}\\u{113D3}\\u{11400}-\\u{11434}\\u{11447}-\\u{1144A}\\u{1145F}-\\u{11461}\\u{11480}-\\u{114AF}\\u{114C4}-\\u{114C5}\\u{114C7}\\u{11580}-\\u{115AE}\\u{115D8}-\\u{115DB}\\u{11600}-\\u{1162F}\\u{11644}\\u{11680}-\\u{116AA}\\u{116B8}\\u{11700}-\\u{1171A}\\u{11740}-\\u{11746}\\u{11800}-\\u{1182B}\\u{118A0}-\\u{118DF}\\u{118FF}-\\u{11906}\\u{11909}\\u{1190C}-\\u{11913}\\u{11915}-\\u{11916}\\u{11918}-\\u{1192F}\\u{1193F}\\u{11941}\\u{119A0}-\\u{119A7}\\u{119AA}-\\u{119D0}\\u{119E1}\\u{119E3}\\u{11A00}\\u{11A0B}-\\u{11A32}\\u{11A3A}\\u{11A50}\\u{11A5C}-\\u{11A89}\\u{11A9D}\\u{11AB0}-\\u{11AF8}\\u{11BC0}-\\u{11BE0}\\u{11C00}-\\u{11C08}\\u{11C0A}-\\u{11C2E}\\u{11C40}\\u{11C72}-\\u{11C8F}\\u{11D00}-\\u{11D06}\\u{11D08}-\\u{11D09}\\u{11D0B}-\\u{11D30}\\u{11D46}\\u{11D60}-\\u{11D65}\\u{11D67}-\\u{11D68}\\u{11D6A}-\\u{11D89}\\u{11D98}\\u{11DB0}-\\u{11DDB}\\u{11EE0}-\\u{11EF2}\\u{11F02}\\u{11F04}-\\u{11F10}\\u{11F12}-\\u{11F33}\\u{11FB0}\\u{12000}-\\u{12399}\\u{12480}-\\u{12543}\\u{12F90}-\\u{12FF0}\\u{13000}-\\u{1342F}\\u{13441}-\\u{13446}\\u{13460}-\\u{143FA}\\u{14400}-\\u{14646}\\u{16100}-\\u{1611D}\\u{16800}-\\u{16A38}\\u{16A40}-\\u{16A5E}\\u{16A70}-\\u{16ABE}\\u{16AD0}-\\u{16AED}\\u{16B00}-\\u{16B2F}\\u{16B40}-\\u{16B43}\\u{16B63}-\\u{16B77}\\u{16B7D}-\\u{16B8F}\\u{16D40}-\\u{16D6C}\\u{16E40}-\\u{16E7F}\\u{16EA0}-\\u{16EB8}\\u{16EBB}-\\u{16ED3}\\u{16F00}-\\u{16F4A}\\u{16F50}\\u{16F93}-\\u{16F9F}\\u{16FE0}-\\u{16FE1}\\u{16FE3}\\u{16FF2}-\\u{16FF3}\\u{17000}-\\u{18CD5}\\u{18CFF}-\\u{18D1E}\\u{18D80}-\\u{18DF2}\\u{1AFF0}-\\u{1AFF3}\\u{1AFF5}-\\u{1AFFB}\\u{1AFFD}-\\u{1AFFE}\\u{1B000}-\\u{1B122}\\u{1B132}\\u{1B150}-\\u{1B152}\\u{1B155}\\u{1B164}-\\u{1B167}\\u{1B170}-\\u{1B2FB}\\u{1BC00}-\\u{1BC6A}\\u{1BC70}-\\u{1BC7C}\\u{1BC80}-\\u{1BC88}\\u{1BC90}-\\u{1BC99}\\u{1D400}-\\u{1D454}\\u{1D456}-\\u{1D49C}\\u{1D49E}-\\u{1D49F}\\u{1D4A2}\\u{1D4A5}-\\u{1D4A6}\\u{1D4A9}-\\u{1D4AC}\\u{1D4AE}-\\u{1D4B9}\\u{1D4BB}\\u{1D4BD}-\\u{1D4C3}\\u{1D4C5}-\\u{1D505}\\u{1D507}-\\u{1D50A}\\u{1D50D}-\\u{1D514}\\u{1D516}-\\u{1D51C}\\u{1D51E}-\\u{1D539}\\u{1D53B}-\\u{1D53E}\\u{1D540}-\\u{1D544}\\u{1D546}\\u{1D54A}-\\u{1D550}\\u{1D552}-\\u{1D6A5}\\u{1D6A8}-\\u{1D6C0}\\u{1D6C2}-\\u{1D6DA}\\u{1D6DC}-\\u{1D6FA}\\u{1D6FC}-\\u{1D714}\\u{1D716}-\\u{1D734}\\u{1D736}-\\u{1D74E}\\u{1D750}-\\u{1D76E}\\u{1D770}-\\u{1D788}\\u{1D78A}-\\u{1D7A8}\\u{1D7AA}-\\u{1D7C2}\\u{1D7C4}-\\u{1D7CB}\\u{1DF00}-\\u{1DF1E}\\u{1DF25}-\\u{1DF2A}\\u{1E030}-\\u{1E06D}\\u{1E100}-\\u{1E12C}\\u{1E137}-\\u{1E13D}\\u{1E14E}\\u{1E290}-\\u{1E2AD}\\u{1E2C0}-\\u{1E2EB}\\u{1E4D0}-\\u{1E4EB}\\u{1E5D0}-\\u{1E5ED}\\u{1E5F0}\\u{1E6C0}-\\u{1E6DE}\\u{1E6E0}-\\u{1E6E2}\\u{1E6E4}-\\u{1E6E5}\\u{1E6E7}-\\u{1E6ED}\\u{1E6F0}-\\u{1E6F4}\\u{1E6FE}-\\u{1E6FF}\\u{1E7E0}-\\u{1E7E6}\\u{1E7E8}-\\u{1E7EB}\\u{1E7ED}-\\u{1E7EE}\\u{1E7F0}-\\u{1E7FE}\\u{1E800}-\\u{1E8C4}\\u{1E900}-\\u{1E943}\\u{1E94B}\\u{1EE00}-\\u{1EE03}\\u{1EE05}-\\u{1EE1F}\\u{1EE21}-\\u{1EE22}\\u{1EE24}\\u{1EE27}\\u{1EE29}-\\u{1EE32}\\u{1EE34}-\\u{1EE37}\\u{1EE39}\\u{1EE3B}\\u{1EE42}\\u{1EE47}\\u{1EE49}\\u{1EE4B}\\u{1EE4D}-\\u{1EE4F}\\u{1EE51}-\\u{1EE52}\\u{1EE54}\\u{1EE57}\\u{1EE59}\\u{1EE5B}\\u{1EE5D}\\u{1EE5F}\\u{1EE61}-\\u{1EE62}\\u{1EE64}\\u{1EE67}-\\u{1EE6A}\\u{1EE6C}-\\u{1EE72}\\u{1EE74}-\\u{1EE77}\\u{1EE79}-\\u{1EE7C}\\u{1EE7E}\\u{1EE80}-\\u{1EE89}\\u{1EE8B}-\\u{1EE9B}\\u{1EEA1}-\\u{1EEA3}\\u{1EEA5}-\\u{1EEA9}\\u{1EEAB}-\\u{1EEBB}\\u{20000}-\\u{2A6DF}\\u{2A700}-\\u{2B81D}\\u{2B820}-\\u{2CEAD}\\u{2CEB0}-\\u{2EBE0}\\u{2EBF0}-\\u{2EE5D}\\u{2F800}-\\u{2FA1D}\\u{30000}-\\u{3134A}\\u{31350}-\\u{33479}\\u0030-\\u0039\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D58-\\u0D5E\\u0D66-\\u0D78\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19\\u{10107}-\\u{10133}\\u{10140}-\\u{10178}\\u{1018A}-\\u{1018B}\\u{102E1}-\\u{102FB}\\u{10320}-\\u{10323}\\u{10341}\\u{1034A}\\u{103D1}-\\u{103D5}\\u{104A0}-\\u{104A9}\\u{10858}-\\u{1085F}\\u{10879}-\\u{1087F}\\u{108A7}-\\u{108AF}\\u{108FB}-\\u{108FF}\\u{10916}-\\u{1091B}\\u{109BC}-\\u{109BD}\\u{109C0}-\\u{109CF}\\u{109D2}-\\u{109FF}\\u{10A40}-\\u{10A48}\\u{10A7D}-\\u{10A7E}\\u{10A9D}-\\u{10A9F}\\u{10AEB}-\\u{10AEF}\\u{10B58}-\\u{10B5F}\\u{10B78}-\\u{10B7F}\\u{10BA9}-\\u{10BAF}\\u{10CFA}-\\u{10CFF}\\u{10D30}-\\u{10D39}\\u{10D40}-\\u{10D49}\\u{10E60}-\\u{10E7E}\\u{10F1D}-\\u{10F26}\\u{10F51}-\\u{10F54}\\u{10FC5}-\\u{10FCB}\\u{11052}-\\u{1106F}\\u{110F0}-\\u{110F9}\\u{11136}-\\u{1113F}\\u{111D0}-\\u{111D9}\\u{111E1}-\\u{111F4}\\u{112F0}-\\u{112F9}\\u{11450}-\\u{11459}\\u{114D0}-\\u{114D9}\\u{11650}-\\u{11659}\\u{116C0}-\\u{116C9}\\u{116D0}-\\u{116E3}\\u{11730}-\\u{1173B}\\u{118E0}-\\u{118F2}\\u{11950}-\\u{11959}\\u{11BF0}-\\u{11BF9}\\u{11C50}-\\u{11C6C}\\u{11D50}-\\u{11D59}\\u{11DA0}-\\u{11DA9}\\u{11DE0}-\\u{11DE9}\\u{11F50}-\\u{11F59}\\u{11FC0}-\\u{11FD4}\\u{12400}-\\u{1246E}\\u{16130}-\\u{16139}\\u{16A60}-\\u{16A69}\\u{16AC0}-\\u{16AC9}\\u{16B50}-\\u{16B59}\\u{16B5B}-\\u{16B61}\\u{16D70}-\\u{16D79}\\u{16E80}-\\u{16E96}\\u{16FF4}-\\u{16FF6}\\u{1CCF0}-\\u{1CCF9}\\u{1D2C0}-\\u{1D2D3}\\u{1D2E0}-\\u{1D2F3}\\u{1D360}-\\u{1D378}\\u{1D7CE}-\\u{1D7FF}\\u{1E140}-\\u{1E149}\\u{1E2F0}-\\u{1E2F9}\\u{1E4F0}-\\u{1E4F9}\\u{1E5F1}-\\u{1E5FA}\\u{1E8C7}-\\u{1E8CF}\\u{1E950}-\\u{1E959}\\u{1EC71}-\\u{1ECAB}\\u{1ECAD}-\\u{1ECAF}\\u{1ECB1}-\\u{1ECB4}\\u{1ED01}-\\u{1ED2D}\\u{1ED2F}-\\u{1ED3D}\\u{1F100}-\\u{1F10C}\\u{1FBF0}-\\u{1FBF9}_]", "u").test(match[1]);
|
|
838
|
+
});
|
|
839
|
+
hasBareSyntaxOnly = RegExp("[()]", "u").test(terms.replace(/"[^"]*"/g, ' '));
|
|
840
|
+
if (!(signals.words !== undefined && terms.trim() !== '' && (RegExp("[\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088F\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5C-\\u0C5D\\u0C60-\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDC-\\u0CDE\\u0CE0-\\u0CE1\\u0CF1-\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C8A\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5-\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183-\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3006\\u3031-\\u3035\\u303B-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7DC\\uA7F1-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5-\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\\u{10000}-\\u{1000B}\\u{1000D}-\\u{10026}\\u{10028}-\\u{1003A}\\u{1003C}-\\u{1003D}\\u{1003F}-\\u{1004D}\\u{10050}-\\u{1005D}\\u{10080}-\\u{100FA}\\u{10280}-\\u{1029C}\\u{102A0}-\\u{102D0}\\u{10300}-\\u{1031F}\\u{1032D}-\\u{10340}\\u{10342}-\\u{10349}\\u{10350}-\\u{10375}\\u{10380}-\\u{1039D}\\u{103A0}-\\u{103C3}\\u{103C8}-\\u{103CF}\\u{10400}-\\u{1049D}\\u{104B0}-\\u{104D3}\\u{104D8}-\\u{104FB}\\u{10500}-\\u{10527}\\u{10530}-\\u{10563}\\u{10570}-\\u{1057A}\\u{1057C}-\\u{1058A}\\u{1058C}-\\u{10592}\\u{10594}-\\u{10595}\\u{10597}-\\u{105A1}\\u{105A3}-\\u{105B1}\\u{105B3}-\\u{105B9}\\u{105BB}-\\u{105BC}\\u{105C0}-\\u{105F3}\\u{10600}-\\u{10736}\\u{10740}-\\u{10755}\\u{10760}-\\u{10767}\\u{10780}-\\u{10785}\\u{10787}-\\u{107B0}\\u{107B2}-\\u{107BA}\\u{10800}-\\u{10805}\\u{10808}\\u{1080A}-\\u{10835}\\u{10837}-\\u{10838}\\u{1083C}\\u{1083F}-\\u{10855}\\u{10860}-\\u{10876}\\u{10880}-\\u{1089E}\\u{108E0}-\\u{108F2}\\u{108F4}-\\u{108F5}\\u{10900}-\\u{10915}\\u{10920}-\\u{10939}\\u{10940}-\\u{10959}\\u{10980}-\\u{109B7}\\u{109BE}-\\u{109BF}\\u{10A00}\\u{10A10}-\\u{10A13}\\u{10A15}-\\u{10A17}\\u{10A19}-\\u{10A35}\\u{10A60}-\\u{10A7C}\\u{10A80}-\\u{10A9C}\\u{10AC0}-\\u{10AC7}\\u{10AC9}-\\u{10AE4}\\u{10B00}-\\u{10B35}\\u{10B40}-\\u{10B55}\\u{10B60}-\\u{10B72}\\u{10B80}-\\u{10B91}\\u{10C00}-\\u{10C48}\\u{10C80}-\\u{10CB2}\\u{10CC0}-\\u{10CF2}\\u{10D00}-\\u{10D23}\\u{10D4A}-\\u{10D65}\\u{10D6F}-\\u{10D85}\\u{10E80}-\\u{10EA9}\\u{10EB0}-\\u{10EB1}\\u{10EC2}-\\u{10EC7}\\u{10F00}-\\u{10F1C}\\u{10F27}\\u{10F30}-\\u{10F45}\\u{10F70}-\\u{10F81}\\u{10FB0}-\\u{10FC4}\\u{10FE0}-\\u{10FF6}\\u{11003}-\\u{11037}\\u{11071}-\\u{11072}\\u{11075}\\u{11083}-\\u{110AF}\\u{110D0}-\\u{110E8}\\u{11103}-\\u{11126}\\u{11144}\\u{11147}\\u{11150}-\\u{11172}\\u{11176}\\u{11183}-\\u{111B2}\\u{111C1}-\\u{111C4}\\u{111DA}\\u{111DC}\\u{11200}-\\u{11211}\\u{11213}-\\u{1122B}\\u{1123F}-\\u{11240}\\u{11280}-\\u{11286}\\u{11288}\\u{1128A}-\\u{1128D}\\u{1128F}-\\u{1129D}\\u{1129F}-\\u{112A8}\\u{112B0}-\\u{112DE}\\u{11305}-\\u{1130C}\\u{1130F}-\\u{11310}\\u{11313}-\\u{11328}\\u{1132A}-\\u{11330}\\u{11332}-\\u{11333}\\u{11335}-\\u{11339}\\u{1133D}\\u{11350}\\u{1135D}-\\u{11361}\\u{11380}-\\u{11389}\\u{1138B}\\u{1138E}\\u{11390}-\\u{113B5}\\u{113B7}\\u{113D1}\\u{113D3}\\u{11400}-\\u{11434}\\u{11447}-\\u{1144A}\\u{1145F}-\\u{11461}\\u{11480}-\\u{114AF}\\u{114C4}-\\u{114C5}\\u{114C7}\\u{11580}-\\u{115AE}\\u{115D8}-\\u{115DB}\\u{11600}-\\u{1162F}\\u{11644}\\u{11680}-\\u{116AA}\\u{116B8}\\u{11700}-\\u{1171A}\\u{11740}-\\u{11746}\\u{11800}-\\u{1182B}\\u{118A0}-\\u{118DF}\\u{118FF}-\\u{11906}\\u{11909}\\u{1190C}-\\u{11913}\\u{11915}-\\u{11916}\\u{11918}-\\u{1192F}\\u{1193F}\\u{11941}\\u{119A0}-\\u{119A7}\\u{119AA}-\\u{119D0}\\u{119E1}\\u{119E3}\\u{11A00}\\u{11A0B}-\\u{11A32}\\u{11A3A}\\u{11A50}\\u{11A5C}-\\u{11A89}\\u{11A9D}\\u{11AB0}-\\u{11AF8}\\u{11BC0}-\\u{11BE0}\\u{11C00}-\\u{11C08}\\u{11C0A}-\\u{11C2E}\\u{11C40}\\u{11C72}-\\u{11C8F}\\u{11D00}-\\u{11D06}\\u{11D08}-\\u{11D09}\\u{11D0B}-\\u{11D30}\\u{11D46}\\u{11D60}-\\u{11D65}\\u{11D67}-\\u{11D68}\\u{11D6A}-\\u{11D89}\\u{11D98}\\u{11DB0}-\\u{11DDB}\\u{11EE0}-\\u{11EF2}\\u{11F02}\\u{11F04}-\\u{11F10}\\u{11F12}-\\u{11F33}\\u{11FB0}\\u{12000}-\\u{12399}\\u{12480}-\\u{12543}\\u{12F90}-\\u{12FF0}\\u{13000}-\\u{1342F}\\u{13441}-\\u{13446}\\u{13460}-\\u{143FA}\\u{14400}-\\u{14646}\\u{16100}-\\u{1611D}\\u{16800}-\\u{16A38}\\u{16A40}-\\u{16A5E}\\u{16A70}-\\u{16ABE}\\u{16AD0}-\\u{16AED}\\u{16B00}-\\u{16B2F}\\u{16B40}-\\u{16B43}\\u{16B63}-\\u{16B77}\\u{16B7D}-\\u{16B8F}\\u{16D40}-\\u{16D6C}\\u{16E40}-\\u{16E7F}\\u{16EA0}-\\u{16EB8}\\u{16EBB}-\\u{16ED3}\\u{16F00}-\\u{16F4A}\\u{16F50}\\u{16F93}-\\u{16F9F}\\u{16FE0}-\\u{16FE1}\\u{16FE3}\\u{16FF2}-\\u{16FF3}\\u{17000}-\\u{18CD5}\\u{18CFF}-\\u{18D1E}\\u{18D80}-\\u{18DF2}\\u{1AFF0}-\\u{1AFF3}\\u{1AFF5}-\\u{1AFFB}\\u{1AFFD}-\\u{1AFFE}\\u{1B000}-\\u{1B122}\\u{1B132}\\u{1B150}-\\u{1B152}\\u{1B155}\\u{1B164}-\\u{1B167}\\u{1B170}-\\u{1B2FB}\\u{1BC00}-\\u{1BC6A}\\u{1BC70}-\\u{1BC7C}\\u{1BC80}-\\u{1BC88}\\u{1BC90}-\\u{1BC99}\\u{1D400}-\\u{1D454}\\u{1D456}-\\u{1D49C}\\u{1D49E}-\\u{1D49F}\\u{1D4A2}\\u{1D4A5}-\\u{1D4A6}\\u{1D4A9}-\\u{1D4AC}\\u{1D4AE}-\\u{1D4B9}\\u{1D4BB}\\u{1D4BD}-\\u{1D4C3}\\u{1D4C5}-\\u{1D505}\\u{1D507}-\\u{1D50A}\\u{1D50D}-\\u{1D514}\\u{1D516}-\\u{1D51C}\\u{1D51E}-\\u{1D539}\\u{1D53B}-\\u{1D53E}\\u{1D540}-\\u{1D544}\\u{1D546}\\u{1D54A}-\\u{1D550}\\u{1D552}-\\u{1D6A5}\\u{1D6A8}-\\u{1D6C0}\\u{1D6C2}-\\u{1D6DA}\\u{1D6DC}-\\u{1D6FA}\\u{1D6FC}-\\u{1D714}\\u{1D716}-\\u{1D734}\\u{1D736}-\\u{1D74E}\\u{1D750}-\\u{1D76E}\\u{1D770}-\\u{1D788}\\u{1D78A}-\\u{1D7A8}\\u{1D7AA}-\\u{1D7C2}\\u{1D7C4}-\\u{1D7CB}\\u{1DF00}-\\u{1DF1E}\\u{1DF25}-\\u{1DF2A}\\u{1E030}-\\u{1E06D}\\u{1E100}-\\u{1E12C}\\u{1E137}-\\u{1E13D}\\u{1E14E}\\u{1E290}-\\u{1E2AD}\\u{1E2C0}-\\u{1E2EB}\\u{1E4D0}-\\u{1E4EB}\\u{1E5D0}-\\u{1E5ED}\\u{1E5F0}\\u{1E6C0}-\\u{1E6DE}\\u{1E6E0}-\\u{1E6E2}\\u{1E6E4}-\\u{1E6E5}\\u{1E6E7}-\\u{1E6ED}\\u{1E6F0}-\\u{1E6F4}\\u{1E6FE}-\\u{1E6FF}\\u{1E7E0}-\\u{1E7E6}\\u{1E7E8}-\\u{1E7EB}\\u{1E7ED}-\\u{1E7EE}\\u{1E7F0}-\\u{1E7FE}\\u{1E800}-\\u{1E8C4}\\u{1E900}-\\u{1E943}\\u{1E94B}\\u{1EE00}-\\u{1EE03}\\u{1EE05}-\\u{1EE1F}\\u{1EE21}-\\u{1EE22}\\u{1EE24}\\u{1EE27}\\u{1EE29}-\\u{1EE32}\\u{1EE34}-\\u{1EE37}\\u{1EE39}\\u{1EE3B}\\u{1EE42}\\u{1EE47}\\u{1EE49}\\u{1EE4B}\\u{1EE4D}-\\u{1EE4F}\\u{1EE51}-\\u{1EE52}\\u{1EE54}\\u{1EE57}\\u{1EE59}\\u{1EE5B}\\u{1EE5D}\\u{1EE5F}\\u{1EE61}-\\u{1EE62}\\u{1EE64}\\u{1EE67}-\\u{1EE6A}\\u{1EE6C}-\\u{1EE72}\\u{1EE74}-\\u{1EE77}\\u{1EE79}-\\u{1EE7C}\\u{1EE7E}\\u{1EE80}-\\u{1EE89}\\u{1EE8B}-\\u{1EE9B}\\u{1EEA1}-\\u{1EEA3}\\u{1EEA5}-\\u{1EEA9}\\u{1EEAB}-\\u{1EEBB}\\u{20000}-\\u{2A6DF}\\u{2A700}-\\u{2B81D}\\u{2B820}-\\u{2CEAD}\\u{2CEB0}-\\u{2EBE0}\\u{2EBF0}-\\u{2EE5D}\\u{2F800}-\\u{2FA1D}\\u{30000}-\\u{3134A}\\u{31350}-\\u{33479}\\u0030-\\u0039\\u00B2-\\u00B3\\u00B9\\u00BC-\\u00BE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D58-\\u0D5E\\u0D66-\\u0D78\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19\\u{10107}-\\u{10133}\\u{10140}-\\u{10178}\\u{1018A}-\\u{1018B}\\u{102E1}-\\u{102FB}\\u{10320}-\\u{10323}\\u{10341}\\u{1034A}\\u{103D1}-\\u{103D5}\\u{104A0}-\\u{104A9}\\u{10858}-\\u{1085F}\\u{10879}-\\u{1087F}\\u{108A7}-\\u{108AF}\\u{108FB}-\\u{108FF}\\u{10916}-\\u{1091B}\\u{109BC}-\\u{109BD}\\u{109C0}-\\u{109CF}\\u{109D2}-\\u{109FF}\\u{10A40}-\\u{10A48}\\u{10A7D}-\\u{10A7E}\\u{10A9D}-\\u{10A9F}\\u{10AEB}-\\u{10AEF}\\u{10B58}-\\u{10B5F}\\u{10B78}-\\u{10B7F}\\u{10BA9}-\\u{10BAF}\\u{10CFA}-\\u{10CFF}\\u{10D30}-\\u{10D39}\\u{10D40}-\\u{10D49}\\u{10E60}-\\u{10E7E}\\u{10F1D}-\\u{10F26}\\u{10F51}-\\u{10F54}\\u{10FC5}-\\u{10FCB}\\u{11052}-\\u{1106F}\\u{110F0}-\\u{110F9}\\u{11136}-\\u{1113F}\\u{111D0}-\\u{111D9}\\u{111E1}-\\u{111F4}\\u{112F0}-\\u{112F9}\\u{11450}-\\u{11459}\\u{114D0}-\\u{114D9}\\u{11650}-\\u{11659}\\u{116C0}-\\u{116C9}\\u{116D0}-\\u{116E3}\\u{11730}-\\u{1173B}\\u{118E0}-\\u{118F2}\\u{11950}-\\u{11959}\\u{11BF0}-\\u{11BF9}\\u{11C50}-\\u{11C6C}\\u{11D50}-\\u{11D59}\\u{11DA0}-\\u{11DA9}\\u{11DE0}-\\u{11DE9}\\u{11F50}-\\u{11F59}\\u{11FC0}-\\u{11FD4}\\u{12400}-\\u{1246E}\\u{16130}-\\u{16139}\\u{16A60}-\\u{16A69}\\u{16AC0}-\\u{16AC9}\\u{16B50}-\\u{16B59}\\u{16B5B}-\\u{16B61}\\u{16D70}-\\u{16D79}\\u{16E80}-\\u{16E96}\\u{16FF4}-\\u{16FF6}\\u{1CCF0}-\\u{1CCF9}\\u{1D2C0}-\\u{1D2D3}\\u{1D2E0}-\\u{1D2F3}\\u{1D360}-\\u{1D378}\\u{1D7CE}-\\u{1D7FF}\\u{1E140}-\\u{1E149}\\u{1E2F0}-\\u{1E2F9}\\u{1E4F0}-\\u{1E4F9}\\u{1E5F1}-\\u{1E5FA}\\u{1E8C7}-\\u{1E8CF}\\u{1E950}-\\u{1E959}\\u{1EC71}-\\u{1ECAB}\\u{1ECAD}-\\u{1ECAF}\\u{1ECB1}-\\u{1ECB4}\\u{1ED01}-\\u{1ED2D}\\u{1ED2F}-\\u{1ED3D}\\u{1F100}-\\u{1F10C}\\u{1FBF0}-\\u{1FBF9}_]", "u").test(terms) || hasBareSyntaxOnly) && !hasEmptyPhrase)) return [
|
|
458
841
|
3,
|
|
459
842
|
15
|
|
460
843
|
];
|
|
844
|
+
syntaxError = (0, _searcherrorts.bareTermSyntaxError)(terms);
|
|
845
|
+
if (syntaxError) throw syntaxError;
|
|
461
846
|
_state.label = 12;
|
|
462
847
|
case 12:
|
|
463
848
|
_state.trys.push([
|
|
@@ -480,17 +865,9 @@ function search(_0, _1, _2) {
|
|
|
480
865
|
err2 = _state.sent();
|
|
481
866
|
throw (0, _searcherrorts.searchError)(err2, terms, scope);
|
|
482
867
|
case 15:
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
r.hit
|
|
487
|
-
];
|
|
488
|
-
}));
|
|
489
|
-
// hit === null here means the bound suppressed snippet(), not "no match" -- distinguish
|
|
490
|
-
// from via='link' rows (never in matchRows, so absent from this set) below.
|
|
491
|
-
oversized = new Set(matchRows.filter(function(r) {
|
|
492
|
-
return r.hit === null;
|
|
493
|
-
}).map(function(r) {
|
|
868
|
+
// Every store's lexical `snippets` is NULL; the snippet text is always computed below.
|
|
869
|
+
// Distinguish from via='link' rows, which never appear in matchRows.
|
|
870
|
+
matchedPaths = new Set(matchRows.map(function(r) {
|
|
494
871
|
return r.path;
|
|
495
872
|
}));
|
|
496
873
|
if (!(signals.links !== undefined)) return [
|
|
@@ -529,7 +906,7 @@ function search(_0, _1, _2) {
|
|
|
529
906
|
// rounded score/similarity are printed at full precision in rows.
|
|
530
907
|
return [
|
|
531
908
|
4,
|
|
532
|
-
store.exec('CREATE TEMP TABLE _search ("path" TEXT PRIMARY KEY, score DOUBLE, via TEXT,
|
|
909
|
+
store.exec('CREATE TEMP TABLE _search ("path" TEXT PRIMARY KEY, score DOUBLE, via TEXT, lines TEXT, similarity DOUBLE)')
|
|
533
910
|
];
|
|
534
911
|
case 21:
|
|
535
912
|
_state.sent();
|
|
@@ -539,14 +916,13 @@ function search(_0, _1, _2) {
|
|
|
539
916
|
];
|
|
540
917
|
return [
|
|
541
918
|
4,
|
|
542
|
-
store.runBatch('INSERT INTO _search ("path", score, via,
|
|
919
|
+
store.runBatch('INSERT INTO _search ("path", score, via, lines, similarity) VALUES (?, ?, ?, ?, ?)', _to_consumable_array(candidates).map(function(param) {
|
|
543
920
|
var _param = _sliced_to_array(param, 2), path = _param[0], c = _param[1];
|
|
544
|
-
var
|
|
921
|
+
var _chunkLines_get, _chunkSimilarity_get;
|
|
545
922
|
return [
|
|
546
923
|
path,
|
|
547
924
|
c.score,
|
|
548
925
|
c.via,
|
|
549
|
-
(_hits_get = hits.get(path)) !== null && _hits_get !== void 0 ? _hits_get : null,
|
|
550
926
|
(_chunkLines_get = chunkLines.get(path)) !== null && _chunkLines_get !== void 0 ? _chunkLines_get : null,
|
|
551
927
|
(_chunkSimilarity_get = chunkSimilarity.get(path)) !== null && _chunkSimilarity_get !== void 0 ? _chunkSimilarity_get : null
|
|
552
928
|
];
|
|
@@ -559,12 +935,12 @@ function search(_0, _1, _2) {
|
|
|
559
935
|
// Reapplies --where even though _search is already scope+where filtered, since the join to
|
|
560
936
|
// frontmatter is already needed for the path column.
|
|
561
937
|
where = scope ? "WHERE (".concat(scope, ")") : '';
|
|
562
|
-
// lines: semantic rows carry their chunk's range,
|
|
563
|
-
//
|
|
938
|
+
// lines: semantic rows carry their chunk's range, lexical rows gain one below,
|
|
939
|
+
// everything else stays null; similarity stays semantic-only.
|
|
564
940
|
similarityCol = semanticEnabled ? ', _search.similarity' : '';
|
|
565
941
|
return [
|
|
566
942
|
4,
|
|
567
|
-
store.prepare('SELECT f."path" AS path, content.title, content.summary,
|
|
943
|
+
store.prepare('SELECT f."path" AS path, content.title, content.summary, NULL AS snippets, _search.via, round(_search.score, 4) AS score, _search.lines'.concat(similarityCol, '\n FROM _search JOIN frontmatter f ON f."path" = _search."path" JOIN content ON content.path = _search."path"\n ').concat(where, " ORDER BY _search.score DESC LIMIT ?"))
|
|
568
944
|
];
|
|
569
945
|
case 24:
|
|
570
946
|
selectStmt = _state.sent();
|
|
@@ -574,100 +950,32 @@ function search(_0, _1, _2) {
|
|
|
574
950
|
];
|
|
575
951
|
case 25:
|
|
576
952
|
rows = _state.sent();
|
|
577
|
-
if (!(oversized.size > 0)) return [
|
|
578
|
-
3,
|
|
579
|
-
35
|
|
580
|
-
];
|
|
581
|
-
bareTerms = extractBareTerms(terms);
|
|
582
953
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
583
|
-
_state.label = 26;
|
|
584
|
-
case 26:
|
|
585
|
-
_state.trys.push([
|
|
586
|
-
26,
|
|
587
|
-
33,
|
|
588
|
-
34,
|
|
589
|
-
35
|
|
590
|
-
]);
|
|
591
|
-
_iterator = rows[Symbol.iterator]();
|
|
592
|
-
_state.label = 27;
|
|
593
|
-
case 27:
|
|
594
|
-
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
595
|
-
3,
|
|
596
|
-
32
|
|
597
|
-
];
|
|
598
|
-
row = _step.value;
|
|
599
|
-
if (row.hit !== null || !oversized.has(row.path)) return [
|
|
600
|
-
3,
|
|
601
|
-
31
|
|
602
|
-
];
|
|
603
|
-
text = void 0;
|
|
604
|
-
try {
|
|
605
|
-
text = (0, _nodefs.readFileSync)((0, _nodepath.join)(cfg.baseDir, row.path), 'utf8');
|
|
606
|
-
} catch (unused) {
|
|
607
|
-
return [
|
|
608
|
-
3,
|
|
609
|
-
31
|
|
610
|
-
]; // vanished since the match; leave hit/lines null rather than throw
|
|
611
|
-
}
|
|
612
|
-
_computeExcerpt = computeExcerpt(text, bareTerms), excerpt = _computeExcerpt.excerpt, offset = _computeExcerpt.offset;
|
|
613
|
-
row.hit = excerpt;
|
|
614
|
-
if (!(row.lines == null)) return [
|
|
615
|
-
3,
|
|
616
|
-
31
|
|
617
|
-
];
|
|
618
|
-
if (!(0, _indexts.featureEnabled)(cfg, 'sections')) return [
|
|
619
|
-
3,
|
|
620
|
-
29
|
|
621
|
-
];
|
|
622
|
-
return [
|
|
623
|
-
4,
|
|
624
|
-
lineRangeFor(store, row.path, lineNumberAt(text, offset))
|
|
625
|
-
];
|
|
626
|
-
case 28:
|
|
627
|
-
_tmp1 = _state.sent();
|
|
628
|
-
return [
|
|
629
|
-
3,
|
|
630
|
-
30
|
|
631
|
-
];
|
|
632
|
-
case 29:
|
|
633
|
-
_tmp1 = null;
|
|
634
|
-
_state.label = 30;
|
|
635
|
-
case 30:
|
|
636
|
-
row.lines = _tmp1;
|
|
637
|
-
_state.label = 31;
|
|
638
|
-
case 31:
|
|
639
|
-
_iteratorNormalCompletion = true;
|
|
640
|
-
return [
|
|
641
|
-
3,
|
|
642
|
-
27
|
|
643
|
-
];
|
|
644
|
-
case 32:
|
|
645
|
-
return [
|
|
646
|
-
3,
|
|
647
|
-
35
|
|
648
|
-
];
|
|
649
|
-
case 33:
|
|
650
|
-
err = _state.sent();
|
|
651
|
-
_didIteratorError = true;
|
|
652
|
-
_iteratorError = err;
|
|
653
|
-
return [
|
|
654
|
-
3,
|
|
655
|
-
35
|
|
656
|
-
];
|
|
657
|
-
case 34:
|
|
658
954
|
try {
|
|
659
|
-
|
|
660
|
-
|
|
955
|
+
for(_iterator = rows[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
956
|
+
row = _step.value;
|
|
957
|
+
row.snippets = [];
|
|
661
958
|
}
|
|
959
|
+
} catch (err) {
|
|
960
|
+
_didIteratorError = true;
|
|
961
|
+
_iteratorError = err;
|
|
662
962
|
} finally{
|
|
663
|
-
|
|
664
|
-
|
|
963
|
+
try {
|
|
964
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
965
|
+
_iterator.return();
|
|
966
|
+
}
|
|
967
|
+
} finally{
|
|
968
|
+
if (_didIteratorError) {
|
|
969
|
+
throw _iteratorError;
|
|
970
|
+
}
|
|
665
971
|
}
|
|
666
972
|
}
|
|
667
973
|
return [
|
|
668
|
-
|
|
974
|
+
4,
|
|
975
|
+
hydrateSearchRows(store, cfg, rows, matchedPaths, terms, opts)
|
|
669
976
|
];
|
|
670
|
-
case
|
|
977
|
+
case 26:
|
|
978
|
+
_state.sent();
|
|
671
979
|
return [
|
|
672
980
|
2,
|
|
673
981
|
rows
|