From 81029db1650cef8769c944d37ab869b30eea79cb Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 29 Jan 2019 09:47:01 +0800 Subject: [PATCH] RegularTextMessageEntity and convertToFullMessageEntityList --- CHANGELOG.md | 3 ++ .../MessageEntity/RegularTextMessageEntity.kt | 7 +++ .../TelegramBotAPI/utils/CaptionSourcer.kt | 47 +++++++++++++------ 3 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index cd5b130555..d996a84e50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ * Updated built-in lengths restrictions * Apply restrictions of text limit for sending messages +* Add `RegularTextMessageEntity` which is useful for representing regular text message entity +* Add `convertToFullMessageEntityList` which create list of entities with `RegularTextMessageEntity` on places where +must be regular text ### 0.8.5 diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt new file mode 100644 index 0000000000..5c899b71e8 --- /dev/null +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt @@ -0,0 +1,7 @@ +package com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity + +data class RegularTextMessageEntity( + override val offset: Int, + override val length: Int, + override val sourceString: String +) : MessageEntity diff --git a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/CaptionSourcer.kt b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/CaptionSourcer.kt index 45221f7716..615784cfd0 100644 --- a/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/CaptionSourcer.kt +++ b/src/main/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/CaptionSourcer.kt @@ -1,6 +1,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.utils import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.MessageEntity +import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.RegularTextMessageEntity import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.TextContent import com.github.insanusmokrassar.TelegramBotAPI.types.message.content.abstracts.CaptionedMediaContent import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toMarkdown @@ -9,21 +10,7 @@ fun createMarkdownText( text: String, messageEntities: List ): String { - val builder = StringBuilder() - var offset = 0 - for (entity in messageEntities) { - builder.append( - text.substring(offset until entity.offset).toMarkdown() - ) - builder.append( - entity.asMarkdownSource - ) - offset += entity.length - } - builder.append( - text.substring(offset).toMarkdown() - ) - return builder.toString() + return convertToFullMessageEntityList(text, messageEntities).joinToString("", "", "") { it.asMarkdownSource } } fun CaptionedMediaContent.toMarkdownCaption(): String? = caption ?.let { @@ -33,7 +20,37 @@ fun CaptionedMediaContent.toMarkdownCaption(): String? = caption ?.let { ) } +fun CaptionedMediaContent.fullEntitiesList(): List = caption ?.let { + convertToFullMessageEntityList(it, captionEntities) +} ?: emptyList() + fun TextContent.toMarkdownText(): String = createMarkdownText( text, entities ) + +fun TextContent.fullEntitiesList(): List = convertToFullMessageEntityList(text, entities) + +fun convertToFullMessageEntityList( + text: String, + messageEntities: List +): List { + val result = mutableListOf() + + var offset = 0 + for (entity in messageEntities) { + val newEntitySize = entity.offset - offset + if (newEntitySize > 0) { + val regularEntity = RegularTextMessageEntity(offset, newEntitySize, text.substring(offset, entity.offset)) + result.add(regularEntity) + offset += regularEntity.length + } + result.add(entity) + offset += entity.length + } + val newEntitySize = text.length - offset + if (newEntitySize > 0) { + result.add(RegularTextMessageEntity(offset, newEntitySize, text.substring(offset, text.length))) + } + return result +}