From 442cdfdf2a44d3fbbeb549332a6ebe0e141b105f Mon Sep 17 00:00:00 2001 From: jiftechnify Date: Wed, 27 Mar 2024 21:19:52 +0900 Subject: [PATCH] move MetaTagsParser to common module --- .../amethyst/service/previews/UrlPreviewUtils.kt | 2 ++ .../amethyst/commons/preview}/MetaTagsParserTest.kt | 2 +- .../amethyst/commons/preview}/MetaTagsParser.kt | 13 +++++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) rename {app/src/test/java/com/vitorpamplona/amethyst/service/previews => commons/src/androidTest/java/com/vitorpamplona/amethyst/commons/preview}/MetaTagsParserTest.kt (98%) rename {app/src/main/java/com/vitorpamplona/amethyst/service/previews => commons/src/main/java/com/vitorpamplona/amethyst/commons/preview}/MetaTagsParser.kt (96%) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlPreviewUtils.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlPreviewUtils.kt index 71553b77b..ea2425fc3 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlPreviewUtils.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/previews/UrlPreviewUtils.kt @@ -20,6 +20,8 @@ */ package com.vitorpamplona.amethyst.service.previews +import com.vitorpamplona.amethyst.commons.preview.MetaTag +import com.vitorpamplona.amethyst.commons.preview.MetaTagsParser import com.vitorpamplona.amethyst.service.HttpClientManager import com.vitorpamplona.amethyst.service.checkNotInMainThread import kotlinx.coroutines.Dispatchers diff --git a/app/src/test/java/com/vitorpamplona/amethyst/service/previews/MetaTagsParserTest.kt b/commons/src/androidTest/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParserTest.kt similarity index 98% rename from app/src/test/java/com/vitorpamplona/amethyst/service/previews/MetaTagsParserTest.kt rename to commons/src/androidTest/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParserTest.kt index ef5cc8311..ddf88e065 100644 --- a/app/src/test/java/com/vitorpamplona/amethyst/service/previews/MetaTagsParserTest.kt +++ b/commons/src/androidTest/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParserTest.kt @@ -18,7 +18,7 @@ * 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.amethyst.service.previews +package com.vitorpamplona.amethyst.commons.preview import org.junit.Assert.assertEquals import org.junit.Test diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/previews/MetaTagsParser.kt b/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParser.kt similarity index 96% rename from app/src/main/java/com/vitorpamplona/amethyst/service/previews/MetaTagsParser.kt rename to commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParser.kt index 5245e92c0..093ba98e6 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/previews/MetaTagsParser.kt +++ b/commons/src/main/java/com/vitorpamplona/amethyst/commons/preview/MetaTagsParser.kt @@ -18,20 +18,25 @@ * 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.amethyst.service.previews +package com.vitorpamplona.amethyst.commons.preview import kotlinx.collections.immutable.toImmutableMap import java.lang.StringBuilder -internal data class MetaTag(private val attrs: Map) { +data class MetaTag(private val attrs: Map) { + /** + * Returns a value of an attribute specified by its name (case insensitive), or empty string if it doesn't exist. + */ fun attr(name: String): String = attrs[name.lowercase()] ?: "" } -// parse a partial HTML document and extract meta tags -internal object MetaTagsParser { +object MetaTagsParser { private val NON_ATTR_NAME_CHARS = setOf(Char(0x0), '"', '\'', '>', '/') private val NON_UNQUOTED_ATTR_VALUE_CHARS = setOf('"', '\'', '=', '>', '<', '`') + /** + * Lazily parse a partial HTML document and extract meta tags. + */ fun parse(input: String): Sequence = sequence { val s = TagScanner(input)