From 2d5732bccea1bec461261cff65ff3927a00abb66 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 13 May 2025 14:40:03 -0400 Subject: [PATCH] Normalizes hashtag transformations for filters. --- .../nip01Core/tags/hashtags/MipMapHashTags.kt | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/tags/hashtags/MipMapHashTags.kt diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/tags/hashtags/MipMapHashTags.kt b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/tags/hashtags/MipMapHashTags.kt new file mode 100644 index 000000000..b32c903c6 --- /dev/null +++ b/quartz/src/main/java/com/vitorpamplona/quartz/nip01Core/tags/hashtags/MipMapHashTags.kt @@ -0,0 +1,37 @@ +/** + * Copyright (c) 2024 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.quartz.nip01Core.tags.hashtags + +import java.util.Locale + +fun hashtagAlts(tag: String): Set = + setOf( + tag, + tag.lowercase(), + tag.uppercase(), + tag.replaceFirstChar { + if (it.isLowerCase()) it.titlecase(Locale.ROOT) else it.toString() + }, + ) + +fun hashtagAlts(tags: List): Set = tags.map { hashtagAlts(it) }.flatten().toSet() + +fun hashtagAlts(tags: Set): Set = tags.map { hashtagAlts(it) }.flatten().toSet()