Skip to content

Commit de6fb6f

Browse files
committed
fix: Even more edge cases for headings not tokenized in combination with other tags
1 parent ab8dc53 commit de6fb6f

1 file changed

Lines changed: 14 additions & 12 deletions

File tree

src/Yawiki/YawikiTokenizer.php

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -165,23 +165,25 @@ private function buildPatterns(): void
165165

166166
// Inline pattern: combined alternation
167167
// Order matters: ''' before '', ** before *, etc.
168+
// NOTE: /U flag makes quantifiers ungreedy by default,
169+
// so .+ is lazy (non-greedy) and .+? is greedy.
168170
$this->inlinePattern = '/(?:'
169-
. "'''(.+?)'''" // group 1: bold (triple quote)
170-
. "|''(.+?)''" // group 2: italic (double quote)
171-
. '|\*\*(.+?)\*\*' // group 3: strong
172-
. '|\/\/(.+?)\/\/' // group 4: emphasis
173-
. '|__(.+?)__' // group 5: underline
174-
. '|\{\{(.+?)\}\}' // group 6: monospace
175-
. '|\^\^(.+?)\^\^' // group 7: superscript
176-
. '|,,(.+?),,' // group 8: subscript
177-
. '|##([a-zA-Z0-9#]+)\|(.+?)##' // groups 9,10: colortext
178-
. '|@@(.+?)@@' // group 11: revise
171+
. "'''(.+)'''" // group 1: bold (triple quote)
172+
. "|''(.+)''" // group 2: italic (double quote)
173+
. '|\*\*(.+)\*\*' // group 3: strong
174+
. '|(?<!:)\/\/(.+)\/\/' // group 4: emphasis (negative lookbehind avoids :// in URLs)
175+
. '|__(.+)__' // group 5: underline
176+
. '|\{\{(.+)\}\}' // group 6: monospace
177+
. '|\^\^(.+)\^\^' // group 7: superscript
178+
. '|,,(.+),,' // group 8: subscript
179+
. '|##([a-zA-Z0-9#]+)\|(.+)##' // groups 9,10: colortext
180+
. '|@@(.+)@@' // group 11: revise
179181
. '| _\n' // group 12 implicit: line break
180182
. '|\[(\w+:\/\/[^\]\s]+)(?:\s+([^\]]+))?\]' // groups 12,13: url
181183
. '|\[([A-Za-z][-\w\/]*(?:#[-\w:.]+)?)(?:\s+([^\]]+))?\]' // groups 14,15: wikilink [Page text]
182184
. '|\(\(([^\)]+)\)\)' // group 16: freelink
183-
. '|\[\[php\s+(.+?)\]\]' // group 17: phplookup
184-
. '|(?<![A-Za-z0-9\-_])(!)?((?:[A-Z][A-Za-z0-9]*?[a-z0-9]+?[A-Z][A-Za-z0-9]*?)(?:\/(?:[A-Z][A-Za-z0-9]*?[a-z0-9]+?[A-Z][A-Za-z0-9]*?))*?)(?![A-Za-z0-9\-_\/])' // groups 18,19: CamelCase wikilink
185+
. '|\[\[php\s+(.+)\]\]' // group 17: phplookup
186+
. '|(?<![A-Za-z0-9\-_])(!)?((?:[A-Z][A-Za-z0-9]*[a-z0-9]+[A-Z][A-Za-z0-9]*)(?:\/(?:[A-Z][A-Za-z0-9]*[a-z0-9]+[A-Z][A-Za-z0-9]*))*)(?![A-Za-z0-9\-_\/])' // groups 18,19: CamelCase wikilink
185187
. ')/Us';
186188
}
187189

0 commit comments

Comments
 (0)