Lines Matching +full:- +full:b

13         $this->assertFalse($lexer->parse("abcdef"));
14 $this->assertSame([], $handler->recorded);
21 $lexer->addPattern("a+");
22 $this->assertTrue($lexer->parse(""));
23 $this->assertSame([], $handler->recorded);
30 $lexer->addPattern("a+");
31 $this->assertTrue($lexer->parse("aaaxayyyaxaaaz"));
32 $this->assertSame([
41 ], $handler->recorded);
48 $lexer->addPattern("a+");
49 $lexer->addPattern("b+");
50 $this->assertTrue($lexer->parse("ababbxbaxxxxxxax"));
51 $expected = ['a', 'b', 'a', 'bb', 'x', 'b', 'a', 'xxxxxx', 'a', 'x'];
52 $actual = array_column($handler->recorded, 1);
53 $this->assertSame($expected, $actual);
60 $lexer->addPattern("a+", "a");
61 $lexer->addPattern("b+", "b");
62 $this->assertTrue($lexer->parse("abaabxbaaaxaaaax"));
63 $this->assertSame([
65 ['a', 'b', \DOKU_LEXER_UNMATCHED, 1],
72 ], $handler->recorded);
79 $lexer->addPattern("a+", "a");
80 $lexer->addEntryPattern(":", "a", "b");
81 $lexer->addPattern("b+", "b");
82 $this->assertTrue($lexer->parse("abaabaaa:ababbabbba"));
83 $this->assertSame([
85 ['a', 'b', \DOKU_LEXER_UNMATCHED, 1],
87 ['a', 'b', \DOKU_LEXER_UNMATCHED, 4],
89 ['b', ':', \DOKU_LEXER_ENTER, 8],
90 ['b', 'a', \DOKU_LEXER_UNMATCHED, 9],
91 ['b', 'b', \DOKU_LEXER_MATCHED, 10],
92 ['b', 'a', \DOKU_LEXER_UNMATCHED, 11],
93 ['b', 'bb', \DOKU_LEXER_MATCHED, 12],
94 ['b', 'a', \DOKU_LEXER_UNMATCHED, 14],
95 ['b', 'bbb', \DOKU_LEXER_MATCHED, 15],
96 ['b', 'a', \DOKU_LEXER_UNMATCHED, 18],
97 ], $handler->recorded);
104 $lexer->addPattern("a+", "a");
105 $lexer->addEntryPattern("(", "a", "b");
106 $lexer->addPattern("b+", "b");
107 $lexer->addExitPattern(")", "b");
108 $this->assertTrue($lexer->parse("aabaab(bbabb)aab"));
109 $this->assertSame([
111 ['a', 'b', \DOKU_LEXER_UNMATCHED, 2],
113 ['a', 'b', \DOKU_LEXER_UNMATCHED, 5],
114 ['b', '(', \DOKU_LEXER_ENTER, 6],
115 ['b', 'bb', \DOKU_LEXER_MATCHED, 7],
116 ['b', 'a', \DOKU_LEXER_UNMATCHED, 9],
117 ['b', 'bb', \DOKU_LEXER_MATCHED, 10],
118 ['b', ')', \DOKU_LEXER_EXIT, 12],
120 ['a', 'b', \DOKU_LEXER_UNMATCHED, 15],
121 ], $handler->recorded);
128 $lexer->addPattern("a+", "a");
129 $lexer->addSpecialPattern("b+", "a", "b");
130 $this->assertTrue($lexer->parse("aabaaxxbbbxx"));
131 $this->assertSame([
133 ['b', 'b', \DOKU_LEXER_SPECIAL, 2],
136 ['b', 'bbb', \DOKU_LEXER_SPECIAL, 7],
138 ], $handler->recorded);
145 $lexer->addPattern("a+", "a");
146 $lexer->addExitPattern(")", "a");
147 $this->assertFalse($lexer->parse("aa)aa"));
148 $this->assertSame([
151 ], $handler->recorded);
158 $lexer->addPattern("a+", "mode_a");
159 $lexer->addEntryPattern("(", "mode_a", "mode_b");
160 $lexer->addPattern("b+", "mode_b");
161 $lexer->addExitPattern(")", "mode_b");
162 $lexer->mapHandler("mode_a", "a");
163 $lexer->mapHandler("mode_b", "a");
164 $this->assertTrue($lexer->parse("aa(bbabb)b"));
165 $this->assertSame([
172 ['a', 'b', \DOKU_LEXER_UNMATCHED, 9],
173 ], $handler->recorded);
181 $lexer->addEntryPattern("<file>", "ignore", "caught");
182 $lexer->addExitPattern("</file>", "caught");
183 $lexer->addSpecialPattern('b', 'caught', 'special');
184 $lexer->mapHandler('special', 'caught');
185 $lexer->addPattern('c', 'caught');
186 $this->assertTrue($lexer->parse($doc));
188 $caught = array_values(array_filter($handler->recorded, fn($c) => $c[0] === 'caught'));
189 $this->assertSame([
191 ['caught', 'b', \DOKU_LEXER_SPECIAL, strpos($doc, 'b')],
203 $lexer->addEntryPattern('<file>(?=.*</file>)', "ignore", "caught");
204 $lexer->addExitPattern("</file>", "caught");
205 $lexer->addSpecialPattern('b', 'caught', 'special');
206 $lexer->mapHandler('special', 'caught');
207 $lexer->addPattern('c', 'caught');
208 $this->assertTrue($lexer->parse($doc));
210 $caught = array_values(array_filter($handler->recorded, fn($c) => $c[0] === 'caught'));
211 $this->assertSame([
213 ['caught', 'b', \DOKU_LEXER_SPECIAL, strpos($doc, 'b')],
225 $lexer->addEntryPattern('<file>(?!foo)', "ignore", "caught");
226 $lexer->addExitPattern("</file>", "caught");
227 $lexer->addSpecialPattern('b', 'caught', 'special');
228 $lexer->mapHandler('special', 'caught');
229 $lexer->addPattern('c', 'caught');
230 $this->assertTrue($lexer->parse($doc));
232 $caught = array_values(array_filter($handler->recorded, fn($c) => $c[0] === 'caught'));
233 $this->assertSame([
235 ['caught', 'b', \DOKU_LEXER_SPECIAL, strpos($doc, 'b')],
247 $lexer->addEntryPattern('<file>', "ignore", "caught");
248 $lexer->addExitPattern("(?<=d)</file>", "caught");
249 $lexer->addSpecialPattern('b', 'caught', 'special');
250 $lexer->mapHandler('special', 'caught');
251 $lexer->addPattern('c', 'caught');
252 $this->assertTrue($lexer->parse($doc));
254 $caught = array_values(array_filter($handler->recorded, fn($c) => $c[0] === 'caught'));
255 $this->assertSame([
257 ['caught', 'b', \DOKU_LEXER_SPECIAL, strpos($doc, 'b')],
269 $lexer->addEntryPattern('<file>', 'ignore', 'caught');
270 $lexer->addExitPattern('(?<!c)</file>', 'caught');
271 $lexer->addSpecialPattern('b', 'caught', 'special');
272 $lexer->mapHandler('special', 'caught');
273 $lexer->addPattern('c', 'caught');
274 $this->assertTrue($lexer->parse($doc));
276 $caught = array_values(array_filter($handler->recorded, fn($c) => $c[0] === 'caught'));
277 $this->assertSame([
279 ['caught', 'b', \DOKU_LEXER_SPECIAL, strpos($doc, 'b')],
287 * Exit-pattern lookbehind must see characters that were already consumed
296 * Here the exit pattern `(?<=\/>)</x>` requires the `/>` of a self-closing
305 $lexer->addEntryPattern('<x>', 'ignore', 'caught');
306 $lexer->addSpecialPattern('<a\/>', 'caught', 'selfclose');
307 $lexer->mapHandler('selfclose', 'caught');
308 $lexer->addExitPattern('(?<=\/>)<\/x>', 'caught');
309 $this->assertTrue($lexer->parse($doc));
311 $caught = array_values(array_filter($handler->recorded, fn($c) => $c[0] === 'caught'));
312 $this->assertSame([
321 * when there are non-captured elements in the pattern.
326 $pattern = '\bFOO\b';
329 $lexer->addSpecialPattern($pattern, 'ignore', 'caught');
330 $this->assertTrue($lexer->parse($doc));
332 $caught = array_values(array_filter($handler->recorded, fn($c) => $c[0] === 'caught'));
335 $this->assertCount(1, $caught);
336 $this->assertSame('FOO', $caught[0][1]);
337 $this->assertSame(\DOKU_LEXER_SPECIAL, $caught[0][2]);
338 $this->assertSame($matches[0][1], $caught[0][3]);
348 $lexer->addEntryPattern('\*\*', 'ignore', 'caught');
349 $lexer->addCloserPattern('\w\*\*', 'caught', '\n\n');
350 $lexer->addExitPattern('\*\*', 'caught');
352 $this->assertTrue($lexer->parse($doc));
353 $caught = array_values(array_filter($handler->recorded, fn($c) => $c[0] === 'caught'));
354 $this->assertSame([
360 … $this->assertSame(['ignore', "** foo\n\n", \DOKU_LEXER_UNMATCHED, 0], $handler->recorded[0]);
370 $lexer->addEntryPattern('\*\*', 'ignore', 'caught');
371 $lexer->addCloserPattern('\w\*\*', 'caught');
372 $lexer->addExitPattern('\*\*', 'caught');
374 $this->assertTrue($lexer->parse($doc));
375 $this->assertSame(['caught', '**', \DOKU_LEXER_ENTER, 0], $handler->recorded[0]);
380 $doc = 'a ** b ** c';
383 $lexer->addEntryPattern('\*\*', 'ignore', 'caught');
384 $lexer->addCloserPattern('\w\*\*', 'caught');
385 $lexer->addExitPattern('\*\*', 'caught');
387 $this->assertTrue($lexer->parse($doc));
388 $this->assertSame([
389 ['ignore', 'a ** b ** c', \DOKU_LEXER_UNMATCHED, 0],
390 ], $handler->recorded);
398 $doc = 'a **b %%c** d%% e';
401 $lexer->addEntryPattern('\*\*', 'ignore', 'caught');
402 $lexer->addCloserPattern('(?<=\w)\*\*', 'caught');
403 $lexer->addSpecialPattern('%%.*?%%', 'caught', 'prot');
404 $lexer->addExitPattern('\*\*', 'caught');
406 $this->assertTrue($lexer->parse($doc));
407 $this->assertSame([
409 ], $handler->recorded);
416 $doc = 'a **b %%c** d%% e** f';
419 $lexer->addEntryPattern('\*\*', 'ignore', 'caught');
420 $lexer->addCloserPattern('(?<=\w)\*\*', 'caught');
421 $lexer->addSpecialPattern('%%.*?%%', 'caught', 'prot');
422 $lexer->addExitPattern('\*\*', 'caught');
424 $this->assertTrue($lexer->parse($doc));
425 $this->assertSame(['caught', '**', \DOKU_LEXER_ENTER, 2], $handler->recorded[1]);
433 $doc = 'a **b <v>c** d</v> e';
436 $lexer->addEntryPattern('\*\*', 'ignore', 'caught');
437 $lexer->addCloserPattern('(?<=\w)\*\*', 'caught');
438 $lexer->addEntryPattern('<v>', 'caught', 'verb');
439 $lexer->addExitPattern('</v>', 'verb');
440 $lexer->addExitPattern('\*\*', 'caught');
442 $this->assertTrue($lexer->parse($doc));
443 $this->assertSame([
445 ], $handler->recorded);
452 $lexer->addEntryPattern('\*\*', 'ignore', 'caught');
453 $lexer->addCloserPattern('\w\*\*', 'caught');
454 $lexer->addExitPattern('\*\*', 'caught');
457 $this->assertTrue($lexer->parse('x ** a'));
458 $this->assertSame([
460 ], $handler->recorded);
463 $handler->recorded = [];
464 $this->assertTrue($lexer->parse('x **b** c'));
465 $this->assertSame(['caught', '**', \DOKU_LEXER_ENTER, 2], $handler->recorded[1]);
475 $doc = '**A ((B //C)) D** E F//G//';
478 $lexer->addEntryPattern('\*\*', 'ignore', 'outer');
479 $lexer->addCloserPattern('(?<=\w)\*\*', 'outer');
480 $lexer->addEntryPattern('\(\(', 'outer', 'middle'); // unguarded: no closer
481 $lexer->addExitPattern('\)\)', 'middle');
482 $lexer->addEntryPattern('//', 'middle', 'inner');
483 $lexer->addCloserPattern('(?<=\w)//', 'inner');
484 $lexer->addExitPattern('//', 'inner');
485 $lexer->addExitPattern('\*\*', 'outer');
487 $this->assertTrue($lexer->parse($doc));
489 array_filter($handler->recorded, fn($c) => $c[2] === \DOKU_LEXER_ENTER),
492 $this->assertContains('outer', $enterModes);
493 $this->assertContains('middle', $enterModes);
494 $this->assertNotContains('inner', $enterModes);
501 $doc = '**A ((B //C// D)) E**';
504 $lexer->addEntryPattern('\*\*', 'ignore', 'outer');
505 $lexer->addCloserPattern('(?<=\w)\*\*', 'outer');
506 $lexer->addEntryPattern('\(\(', 'outer', 'middle'); // unguarded: no closer
507 $lexer->addExitPattern('\)\)', 'middle');
508 $lexer->addEntryPattern('//', 'middle', 'inner');
509 $lexer->addCloserPattern('(?<=\w)//', 'inner');
510 $lexer->addExitPattern('//', 'inner');
511 $lexer->addExitPattern('\*\*', 'outer');
513 $this->assertTrue($lexer->parse($doc));
515 array_filter($handler->recorded, fn($c) => $c[2] === \DOKU_LEXER_ENTER),
518 $this->assertContains('inner', $enterModes);