1 | export class Filter {
|
2 | refine(context, results) {
|
3 | return results.filter((r) => this.isValid(context, r));
|
4 | }
|
5 | }
|
6 | export class MergingRefiner {
|
7 | refine(context, results) {
|
8 | if (results.length < 2) {
|
9 | return results;
|
10 | }
|
11 | const mergedResults = [];
|
12 | let curResult = results[0];
|
13 | let nextResult = null;
|
14 | for (let i = 1; i < results.length; i++) {
|
15 | nextResult = results[i];
|
16 | const textBetween = context.text.substring(curResult.index + curResult.text.length, nextResult.index);
|
17 | if (!this.shouldMergeResults(textBetween, curResult, nextResult, context)) {
|
18 | mergedResults.push(curResult);
|
19 | curResult = nextResult;
|
20 | }
|
21 | else {
|
22 | const left = curResult;
|
23 | const right = nextResult;
|
24 | const mergedResult = this.mergeResults(textBetween, left, right, context);
|
25 | context.debug(() => {
|
26 | console.log(`${this.constructor.name} merged ${left} and ${right} into ${mergedResult}`);
|
27 | });
|
28 | curResult = mergedResult;
|
29 | }
|
30 | }
|
31 | if (curResult != null) {
|
32 | mergedResults.push(curResult);
|
33 | }
|
34 | return mergedResults;
|
35 | }
|
36 | }
|
37 |
|
\ | No newline at end of file |