diff --git a/CHANGELOG.md b/CHANGELOG.md
index e1e446bde..a8a2c1be7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -32,6 +32,8 @@
- Update AP helpers, adjust RemoteAvatarFetch ttl from 24h to 3 months ([36b23fe3](https://github.com/pixelfed/pixelfed/commit/36b23fe3))
- Update AvatarPipeline, improve refresh logic and garbage collection to purge old avatars ([82798b5e](https://github.com/pixelfed/pixelfed/commit/82798b5e))
- Update CreateAvatar job, add processing constraints and set `is_remote` attribute ([319ced40](https://github.com/pixelfed/pixelfed/commit/319ced40))
+- Update RemoteStatusDelete and DecrementPostCount pipelines ([edbcf3ed](https://github.com/pixelfed/pixelfed/commit/edbcf3ed))
+- Update lexer regex, fix mention regex and add more tests ([778e83d3](https://github.com/pixelfed/pixelfed/commit/778e83d3))
- ([](https://github.com/pixelfed/pixelfed/commit/))
## [v0.11.9 (2023-08-21)](https://github.com/pixelfed/pixelfed/compare/v0.11.8...v0.11.9)
diff --git a/app/Util/Lexer/Regex.php b/app/Util/Lexer/Regex.php
index ecc468d05..f8d77c95f 100755
--- a/app/Util/Lexer/Regex.php
+++ b/app/Util/Lexer/Regex.php
@@ -162,7 +162,7 @@ abstract class Regex
// look-ahead capture here and don't append $after when we return.
$tmp['valid_mention_preceding_chars'] = '([^a-zA-Z0-9_!#\$%&*@@\/]|^|(?:^|[^a-z0-9_+~.-])RT:?)';
- $re['valid_mentions_or_lists'] = '/'.$tmp['valid_mention_preceding_chars'].'(['.$tmp['at_signs'].'])([a-z0-9_\-.]{1,20})((\/[a-z][a-z0-9_\-]{0,24})?(?=(.*|$))(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/i';
+ $re['valid_mentions_or_lists'] = '/'.$tmp['valid_mention_preceding_chars'].'(['.$tmp['at_signs'].'])([\p{L}0-9_\-.]{1,20})((\/[a-z][a-z0-9_\-]{0,24})?(?=(.*|$))(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/iu';
$re['valid_reply'] = '/^(?:['.$tmp['spaces'].'])*['.$tmp['at_signs'].']([a-z0-9_\-.]{1,20})(?=(.*|$))/iu';
$re['end_mention_match'] = '/\A(?:['.$tmp['at_signs'].']|['.$tmp['latin_accents'].']|:\/\/)/iu';
diff --git a/tests/Unit/Lexer/UsernameTest.php b/tests/Unit/Lexer/UsernameTest.php
index 0d21b6e00..64875df7e 100644
--- a/tests/Unit/Lexer/UsernameTest.php
+++ b/tests/Unit/Lexer/UsernameTest.php
@@ -175,4 +175,67 @@ class UsernameTest extends TestCase
$this->assertEquals($expectedEntity, $entities);
}
+ /** @test * */
+ public function germanUmlatsAutolink()
+ {
+ $mentions = "@März and @königin and @Glück";
+ $autolink = Autolink::create()->autolink($mentions);
+
+ $expectedAutolink = '@März and @königin and @Glück';
+ $this->assertEquals($expectedAutolink, $autolink);
+ }
+
+ /** @test * */
+ public function germanUmlatsExtractor()
+ {
+ $mentions = "@März and @königin and @Glück";
+ $entities = Extractor::create()->extract($mentions);
+
+ $expectedEntity = [
+ "hashtags" => [],
+ "urls" => [],
+ "mentions" => [
+ "märz",
+ "königin",
+ "glück",
+ ],
+ "replyto" => null,
+ "hashtags_with_indices" => [],
+ "urls_with_indices" => [],
+ "mentions_with_indices" => [
+ [
+ "screen_name" => "März",
+ "indices" => [
+ 0,
+ 5,
+ ],
+ ],
+ [
+ "screen_name" => "königin",
+ "indices" => [
+ 10,
+ 18,
+ ],
+ ],
+ [
+ "screen_name" => "Glück",
+ "indices" => [
+ 23,
+ 29,
+ ],
+ ],
+ ],
+ ];
+ $this->assertEquals($expectedEntity, $entities);
+ }
+
+ /** @test * */
+ public function germanUmlatsWebfingerAutolink()
+ {
+ $mentions = "hello @märz@example.org!";
+ $autolink = Autolink::create()->autolink($mentions);
+
+ $expectedAutolink = 'hello @märz@example.org!';
+ $this->assertEquals($expectedAutolink, $autolink);
+ }
}