Skip to content

Commit bf3ec97

Browse files
authored
Merge pull request #1082 from phpDocumentor/backport/1.x/pr-1081
[1.x] Merge pull request #1081 from phpDocumentor/fix/deep-glob
2 parents 93538f7 + 7fafc21 commit bf3ec97

File tree

17 files changed

+225
-2
lines changed

17 files changed

+225
-2
lines changed

packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/GlobMenuEntryNodeTransformer.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@
2727
use function explode;
2828
use function implode;
2929
use function in_array;
30+
use function is_string;
3031
use function preg_match;
31-
use function str_replace;
32+
use function preg_replace;
3233

3334
final class GlobMenuEntryNodeTransformer extends AbstractMenuEntryNodeTransformer
3435
{
@@ -137,7 +138,9 @@ private static function matches(string $actualFile, GlobMenuEntryNode $parsedMen
137138
private static function isGlob(string $documentEntryFile, string $currentPath, string $file, string $prefix, array $globExclude): bool
138139
{
139140
if (!in_array($documentEntryFile, $globExclude, true)) {
140-
$file = str_replace('*', '[^\/]*', $file);
141+
$file = preg_replace('/(?<!\*)\*(?!\*)/', '[^\/]*', $file);
142+
assert(is_string($file));
143+
$file = preg_replace('/\*{2}/', '.*', $file);
141144
$pattern = '`^' . $file . '$`';
142145

143146
return preg_match($pattern, $prefix . $documentEntryFile) > 0;
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<!-- content start -->
2+
<div class="section" id="document-title">
3+
<h1>Document Title</h1>
4+
5+
<p>Lorem Ipsum Dolor.</p>
6+
7+
<div class="toc">
8+
<ul class="menu-level">
9+
<li class="toc-item">
10+
<a href="/level-1-1/index.html#level-1-1">Level 1-1</a>
11+
12+
13+
</li>
14+
<li class="toc-item">
15+
<a href="/level-1-1/level-2-1/index.html#level-2-1">Level 2-1</a>
16+
17+
18+
</li>
19+
<li class="toc-item">
20+
<a href="/level-1-1/level-2-1/subpage1.html#subpage-1-level-2-1">Subpage 1, Level 2-1</a>
21+
22+
23+
</li>
24+
<li class="toc-item">
25+
<a href="/level-1-1/level-2-1/subpage2.html#subpage-2-level-2-1">Subpage 2, Level 2-1</a>
26+
27+
28+
</li>
29+
<li class="toc-item">
30+
<a href="/level-1-1/level-2-2/index.html#level-2-2">Level 2-2</a>
31+
32+
33+
</li>
34+
<li class="toc-item">
35+
<a href="/level-1-1/level-2-2/subpage1.html#subpage-1-level-2-2">Subpage 1, Level 2-2</a>
36+
37+
38+
</li>
39+
<li class="toc-item">
40+
<a href="/level-1-1/level-2-2/subpage2.html#subpage-1-level-2-2">Subpage 1, Level 2-2</a>
41+
42+
43+
</li>
44+
<li class="toc-item">
45+
<a href="/level-1-1/subpage1.html#subpage-1-level-1-1">Subpage 1, Level 1-1</a>
46+
47+
48+
</li>
49+
<li class="toc-item">
50+
<a href="/level-1-1/subpage2.html#subpage-2-level-1-1">Subpage 2, Level 1-1</a>
51+
52+
53+
</li>
54+
<li class="toc-item">
55+
<a href="/level-1-2/index.html#level-1-2">Level 1-2</a>
56+
57+
58+
</li>
59+
<li class="toc-item">
60+
<a href="/level-1-2/subpage1.html#subpage-1-level-1-2">Subpage 1, Level 1-2</a>
61+
62+
63+
</li>
64+
<li class="toc-item">
65+
<a href="/level-1-2/subpage2.html#subpage-1-level-1-2">Subpage 1, Level 1-2</a>
66+
67+
68+
</li>
69+
<li class="toc-item">
70+
<a href="/page1.html#page-1">Page 1</a>
71+
72+
<ul class="section-level-1">
73+
<li class="toc-item">
74+
<a href="/page1.html#page-1-level-2">Page 1 Level 2</a>
75+
76+
<ul class="section-level-2">
77+
<li class="toc-item">
78+
<a href="/page1.html#page-1-level-3">Page 1 Level 3</a>
79+
80+
<ul class="section-level-2">
81+
<li class="toc-item">
82+
<a href="/page1.html#page-1-level-4">Page 1 Level 4</a>
83+
84+
85+
</li>
86+
</ul>
87+
</li>
88+
</ul>
89+
</li>
90+
</ul>
91+
</li>
92+
<li class="toc-item">
93+
<a href="/page2.html#page-2">Page 2</a>
94+
95+
<ul class="section-level-1">
96+
<li class="toc-item">
97+
<a href="/page2.html#page-2-level-2">Page 2 Level 2</a>
98+
99+
<ul class="section-level-2">
100+
<li class="toc-item">
101+
<a href="/page2.html#page-2-level-3">Page 2 Level 3</a>
102+
103+
<ul class="section-level-2">
104+
<li class="toc-item">
105+
<a href="/page2.html#page-2-level-4">Page 2 Level 4</a>
106+
107+
108+
</li>
109+
</ul>
110+
</li>
111+
</ul>
112+
</li>
113+
</ul>
114+
</li>
115+
</ul>
116+
</div>
117+
</div>
118+
<!-- content end -->
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
==============
2+
Document Title
3+
==============
4+
5+
Lorem Ipsum Dolor.
6+
7+
.. toctree::
8+
:glob:
9+
10+
**
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
=========
2+
Level 1-1
3+
=========
4+
5+
Lorem Ipsum Dolor.
6+
7+
A Definition List
8+
Some definition.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
=========
2+
Level 2-1
3+
=========
4+
5+
A Toctree with multiple whitespaces in the directive:
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
====================
2+
Subpage 1, Level 2-1
3+
====================
4+
5+
Lorem Ipsum Dolor.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
====================
2+
Subpage 2, Level 2-1
3+
====================
4+
5+
Lorem Ipsum Dolor.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
=========
2+
Level 2-2
3+
=========
4+
5+
A Toctree with multiple whitespaces in the directive:
6+
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
====================
2+
Subpage 1, Level 2-2
3+
====================
4+
5+
Lorem Ipsum Dolor.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
====================
2+
Subpage 1, Level 2-2
3+
====================
4+
5+
Lorem Ipsum Dolor.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
====================
2+
Subpage 1, Level 1-1
3+
====================
4+
5+
Lorem Ipsum Dolor.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
====================
2+
Subpage 2, Level 1-1
3+
====================
4+
5+
Lorem Ipsum Dolor.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
=========
2+
Level 1-2
3+
=========
4+
5+
A Toctree with multiple whitespaces in the directive:
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
====================
2+
Subpage 1, Level 1-2
3+
====================
4+
5+
Lorem Ipsum Dolor.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
====================
2+
Subpage 1, Level 1-2
3+
====================
4+
5+
Lorem Ipsum Dolor.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
======
2+
Page 1
3+
======
4+
5+
Lorem Ipsum Dolor.
6+
7+
Page 1 Level 2
8+
--------------
9+
10+
Page 1 Level 3
11+
~~~~~~~~~~~~~~
12+
13+
Page 1 Level 4
14+
""""""""""""""
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
======
2+
Page 2
3+
======
4+
5+
Lorem Ipsum Dolor.
6+
7+
Page 2 Level 2
8+
--------------
9+
10+
Page 2 Level 3
11+
~~~~~~~~~~~~~~
12+
13+
Page 2 Level 4
14+
""""""""""""""

0 commit comments

Comments
 (0)