From 482d924070ab19ac3776bf46b35e54534f18313c Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Thu, 2 Jan 2020 23:55:26 +0600 Subject: [PATCH] refactor and preparing to multilevel message entities --- CHANGELOG.md | 15 +++++++++---- .../CommonAbstracts/TextSource.kt | 1 + .../MessageEntity/BoldTextMessageEntity.kt | 4 ++-- .../MessageEntity/BotCommandMessageEntity.kt | 4 ++-- .../MessageEntity/CodeTextMessageEntity.kt | 4 ++-- .../types/MessageEntity/EMailMessageEntity.kt | 4 ++-- .../MessageEntity/HashTagMessageEntity.kt | 4 ++-- .../MessageEntity/ItalicTextMessageEntity.kt | 4 ++-- .../MessageEntity/MentionMessageEntity.kt | 4 ++-- .../types/MessageEntity/MessageEntity.kt | 2 ++ .../MessageEntity/PhoneNumberMessageEntity.kt | 4 ++-- .../MessageEntity/PreTextMessageEntity.kt | 4 ++-- .../types/MessageEntity/RawMessageEntity.kt | 2 +- .../MessageEntity/RegularTextMessageEntity.kt | 4 ++-- .../StrikethroughMessageEntity.kt | 4 ++-- .../MessageEntity/TextLinkMessageEntity.kt | 4 ++-- .../MessageEntity/TextMentionMessageEntity.kt | 12 ++-------- .../types/MessageEntity/URLMessageEntity.kt | 7 +++--- .../MessageEntity/UnderlineMessageEntity.kt | 4 ++-- .../textsources/BoldTextSource.kt | 8 ++++--- .../textsources/BotCommandTextSource.kt | 10 +++++---- .../textsources/CodeTextSource.kt | 8 ++++--- .../textsources/EMailTextSource.kt | 8 ++++--- .../textsources/HashTagTextSource.kt | 8 ++++--- .../textsources/ItalicTextSource.kt | 8 ++++--- .../textsources/MentionTextSource.kt | 8 ++++--- .../textsources/PhoneNumberTextSource.kt | 8 ++++--- .../textsources/PreTextSource.kt | 8 ++++--- .../textsources/RegularTextSource.kt | 8 ++++--- .../textsources/StrikethroughTextSource.kt | 8 ++++--- .../textsources/TextLinkTextSource.kt | 6 ++--- .../textsources/TextMentionTextSource.kt | 12 +++------- .../textsources/URLTextSource.kt | 8 ++++--- .../textsources/UnderlineTextSource.kt | 8 ++++--- .../TelegramBotAPI/utils/StringFormatting.kt | 22 ++++++++++--------- .../TelegramBotAPI/utils/extensions/String.kt | 6 +++++ 36 files changed, 137 insertions(+), 106 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d693385ccf..8dac4d4575 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ ## 0.21.0 TelegramBotAPI 4.5 +* Added support of strikethrough and underline + * Added `UnderlineTextSource` and `UnderlineMessageEntity` + * Added `StrikethroughTextSource` and `StrikethroughMessageEntity` + * Added support in `RawMessageEntity` +* Now `TextSource` have its `rawSource` const + * `sourceString` in `MessageEntity` now is deprecated + * All `MessageEntity` classes now have no income parameter `sourceString` + * In most part of `TextSource` classes `asMarkdownSource` and `asHtmlSource` now are getters instead if fields + * All parseMode-specific functions in `StringFormatting` now are not `infix` +* Removed constructor of `TextMentionMessageEntity`, which was deprecated previously +* Removed constructor of `TextMentionTextSource`, which was deprecated previously * All `TelegramMediaFile` instances now have field `fileUniqueId`, which represents `file_unique_id` field from API * Now `ChatPhoto` have two additional fields: `smallFileUniqueId` and `bigFileUniqueId` * Now any administrator object instance have `customTitle` nullable field @@ -11,10 +22,6 @@ bot. ## 0.20.0 MPP Migration -* Added support of strikethrough and underline - * Added `UnderlineTextSource` and `UnderlineMessageEntity` - * Added `StrikethroughTextSource` and `StrikethroughMessageEntity` - * Added support in `RawMessageEntity` * Time library change: `joda-time` -> `com.soywiz.korlibs.klock:klock` * `Currencied` now using as `currency` value with type `String` * For `Java` there is `Currencied#javaCurrency` extension function, which will give an old currency work way diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/CommonAbstracts/TextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/CommonAbstracts/TextSource.kt index 6a40155809..0369f0dbc8 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/CommonAbstracts/TextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/CommonAbstracts/TextSource.kt @@ -1,6 +1,7 @@ package com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts interface TextSource { + val rawSource: String val asMarkdownSource: String val asHtmlSource: String } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BoldTextMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BoldTextMessageEntity.kt index 2e02d6b935..ef5b0dbc96 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BoldTextMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BoldTextMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.boldMarkdown data class BoldTextMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by BoldTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by BoldTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BotCommandMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BotCommandMessageEntity.kt index 088956a44b..8e755225db 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BotCommandMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/BotCommandMessageEntity.kt @@ -8,8 +8,8 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.commandMarkdown data class BotCommandMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String, - private val botCommandTextSource: BotCommandTextSource = BotCommandTextSource(sourceString) + override val rawSource: String, + private val botCommandTextSource: BotCommandTextSource = BotCommandTextSource(rawSource) ) : MessageEntity, TextSource by botCommandTextSource { val command: String get() = botCommandTextSource.command diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/CodeTextMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/CodeTextMessageEntity.kt index bb45546d75..6b65c2e0a7 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/CodeTextMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/CodeTextMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.codeMarkdown data class CodeTextMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by CodeTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by CodeTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/EMailMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/EMailMessageEntity.kt index f5456fbdea..342bd7b5d4 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/EMailMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/EMailMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.emailMarkdown data class EMailMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by EMailTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by EMailTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/HashTagMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/HashTagMessageEntity.kt index 63733e5d8a..65dd2c2ac1 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/HashTagMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/HashTagMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.hashTagMarkdown data class HashTagMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by HashTagTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by HashTagTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/ItalicTextMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/ItalicTextMessageEntity.kt index db25785295..38d9510bb3 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/ItalicTextMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/ItalicTextMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.italicMarkdown data class ItalicTextMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by ItalicTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by ItalicTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MentionMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MentionMessageEntity.kt index 9886f4592e..de484c6925 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MentionMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MentionMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionMarkdown class MentionMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by MentionTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by MentionTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MessageEntity.kt index 79a68f9997..0021ec72a1 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/MessageEntity.kt @@ -5,5 +5,7 @@ import com.github.insanusmokrassar.TelegramBotAPI.CommonAbstracts.TextSource interface MessageEntity : TextSource { val offset: Int val length: Int + @Deprecated("Due to opportunity to get the same string from rawSource const", ReplaceWith("rawSource")) val sourceString: String + get() = rawSource } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PhoneNumberMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PhoneNumberMessageEntity.kt index 79a5fb5357..dfc3710bab 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PhoneNumberMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PhoneNumberMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.phoneMarkdown data class PhoneNumberMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by PhoneNumberTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by PhoneNumberTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PreTextMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PreTextMessageEntity.kt index 80943d942b..b28c189c26 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PreTextMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/PreTextMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.preMarkdown data class PreTextMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by PreTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by PreTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RawMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RawMessageEntity.kt index 83fc584dd5..b732fcb1dc 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RawMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RawMessageEntity.kt @@ -29,7 +29,7 @@ internal data class RawMessageEntity( "code" -> CodeTextMessageEntity(offset, length, sourceSubstring) "pre" -> PreTextMessageEntity(offset, length, sourceSubstring) "text_link" -> TextLinkMessageEntity(offset, length, sourceSubstring, url ?: throw IllegalStateException("URL must not be null for text link")) - "text_mention" -> TextMentionMessageEntity(offset, length, sourceSubstring, user as PrivateChat) + "text_mention" -> TextMentionMessageEntity(offset, length, sourceSubstring, user ?: throw IllegalStateException("User must not be null for text mention")) "underline" -> UnderlineMessageEntity(offset, length, sourceSubstring) "strikethrough" -> StrikethroughMessageEntity(offset, length, sourceSubstring) else -> throw IllegalArgumentException("Unknown type of message entity") diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt index b7e683f80a..b9834832d0 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/RegularTextMessageEntity.kt @@ -8,5 +8,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toMarkdown data class RegularTextMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by RegularTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by RegularTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/StrikethroughMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/StrikethroughMessageEntity.kt index 494980e8d0..315abd4309 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/StrikethroughMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/StrikethroughMessageEntity.kt @@ -6,5 +6,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.textsource class StrikethroughMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by StrikethroughTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by StrikethroughTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextLinkMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextLinkMessageEntity.kt index 576f8043bc..4a8f704ded 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextLinkMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextLinkMessageEntity.kt @@ -8,6 +8,6 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.linkMarkdown data class TextLinkMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String, + override val rawSource: String, val url: String -) : MessageEntity, TextSource by TextLinkTextSource(sourceString, url) +) : MessageEntity, TextSource by TextLinkTextSource(rawSource, url) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMentionMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMentionMessageEntity.kt index ad7334e9af..7a4f8aaa89 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMentionMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/TextMentionMessageEntity.kt @@ -10,14 +10,6 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionMarkdown class TextMentionMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String, + override val rawSource: String, val privateChat: PrivateChat -) : MessageEntity, TextSource by TextMentionTextSource(sourceString, privateChat) { - @Deprecated("Deprecated due to the fact that there is more common constructor") - constructor( - offset: Int, - length: Int, - sourceString: String, - user: User - ) : this(offset, length, sourceString, user as PrivateChat) -} +) : MessageEntity, TextSource by TextMentionTextSource(rawSource, privateChat) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/URLMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/URLMessageEntity.kt index 482ad28fe6..61df04059b 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/URLMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/URLMessageEntity.kt @@ -8,7 +8,8 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.linkMarkdown data class URLMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by URLTextSource(sourceString) { - val url: String = sourceString + override val rawSource: String +) : MessageEntity, TextSource by URLTextSource(rawSource) { + val url: String + get() = rawSource } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/UnderlineMessageEntity.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/UnderlineMessageEntity.kt index 7f630187cb..29519fdf64 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/UnderlineMessageEntity.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/UnderlineMessageEntity.kt @@ -6,5 +6,5 @@ import com.github.insanusmokrassar.TelegramBotAPI.types.MessageEntity.textsource class UnderlineMessageEntity( override val offset: Int, override val length: Int, - override val sourceString: String -) : MessageEntity, TextSource by UnderlineTextSource(sourceString) + override val rawSource: String +) : MessageEntity, TextSource by UnderlineTextSource(rawSource) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/BoldTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/BoldTextSource.kt index 9d1a1f7d7e..fda182dc83 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/BoldTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/BoldTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.boldHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.boldMarkdown class BoldTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.boldMarkdown() - override val asHtmlSource: String = sourceString.boldHTML() + override val asMarkdownSource: String + get() = rawSource.boldMarkdown() + override val asHtmlSource: String + get() = rawSource.boldHTML() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/BotCommandTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/BotCommandTextSource.kt index 2c6eb4e0a3..0eb749548f 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/BotCommandTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/BotCommandTextSource.kt @@ -7,12 +7,14 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.commandMarkdown private val commandRegex = Regex("[/!][^@\\s]*") class BotCommandTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.commandMarkdown() - override val asHtmlSource: String = sourceString.commandHTML() + override val asMarkdownSource: String + get() = rawSource.commandMarkdown() + override val asHtmlSource: String + get() = rawSource.commandHTML() val command: String by lazy { - commandRegex.find(sourceString) ?.value ?.substring(1) ?: sourceString.substring(1)// skip first symbol like "/" or "!" + commandRegex.find(rawSource) ?.value ?.substring(1) ?: rawSource.substring(1)// skip first symbol like "/" or "!" } } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/CodeTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/CodeTextSource.kt index ab0066a60b..0ff5d3334a 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/CodeTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/CodeTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.codeHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.codeMarkdown class CodeTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.codeMarkdown() - override val asHtmlSource: String = sourceString.codeHTML() + override val asMarkdownSource: String + get() = rawSource.codeMarkdown() + override val asHtmlSource: String + get() = rawSource.codeHTML() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/EMailTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/EMailTextSource.kt index 34b5ed34ce..135b31df98 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/EMailTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/EMailTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.emailHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.emailMarkdown class EMailTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.emailMarkdown() - override val asHtmlSource: String = sourceString.emailHTML() + override val asMarkdownSource: String + get() = rawSource.emailMarkdown() + override val asHtmlSource: String + get() = rawSource.emailHTML() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/HashTagTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/HashTagTextSource.kt index 4894fabecf..fb5302d769 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/HashTagTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/HashTagTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.hashTagHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.hashTagMarkdown class HashTagTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.hashTagMarkdown() - override val asHtmlSource: String = sourceString.hashTagHTML() + override val asMarkdownSource: String + get() = rawSource.hashTagMarkdown() + override val asHtmlSource: String + get() = rawSource.hashTagHTML() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/ItalicTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/ItalicTextSource.kt index 2e1d1170e0..2027728f64 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/ItalicTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/ItalicTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.italicHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.italicMarkdown class ItalicTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.italicMarkdown() - override val asHtmlSource: String = sourceString.italicHTML() + override val asMarkdownSource: String + get() = rawSource.italicMarkdown() + override val asHtmlSource: String + get() = rawSource.italicHTML() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/MentionTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/MentionTextSource.kt index 8d2b0cc71a..a865ef6df4 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/MentionTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/MentionTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionMarkdown class MentionTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.mentionMarkdown() - override val asHtmlSource: String = sourceString.mentionHTML() + override val asMarkdownSource: String + get() = rawSource.mentionMarkdown() + override val asHtmlSource: String + get() = rawSource.mentionHTML() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/PhoneNumberTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/PhoneNumberTextSource.kt index f5004fa7d5..d9948a3ea2 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/PhoneNumberTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/PhoneNumberTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.phoneHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.phoneMarkdown class PhoneNumberTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.phoneMarkdown() - override val asHtmlSource: String = sourceString.phoneHTML() + override val asMarkdownSource: String + get() = rawSource.phoneMarkdown() + override val asHtmlSource: String + get() = rawSource.phoneHTML() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/PreTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/PreTextSource.kt index 7a0fea96dc..dd8abe9637 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/PreTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/PreTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.preHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.preMarkdown class PreTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.preMarkdown() - override val asHtmlSource: String = sourceString.preHTML() + override val asMarkdownSource: String + get() = rawSource.preMarkdown() + override val asHtmlSource: String + get() = rawSource.preHTML() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/RegularTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/RegularTextSource.kt index 0125346add..e35c6bd53b 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/RegularTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/RegularTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toHtml import com.github.insanusmokrassar.TelegramBotAPI.utils.extensions.toMarkdown class RegularTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.toMarkdown() - override val asHtmlSource: String = sourceString.toHtml() + override val asMarkdownSource: String + get() = rawSource.toMarkdown() + override val asHtmlSource: String + get() = rawSource.toHtml() } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/StrikethroughTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/StrikethroughTextSource.kt index 2cd6305be3..fa7d3b74cd 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/StrikethroughTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/StrikethroughTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.strikethroughHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.strikethroughMarkdown class StrikethroughTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asHtmlSource: String = sourceString.strikethroughHTML() - override val asMarkdownSource: String = sourceString.strikethroughMarkdown() + override val asHtmlSource: String + get() = rawSource.strikethroughHTML() + override val asMarkdownSource: String + get() = rawSource.strikethroughMarkdown() } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/TextLinkTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/TextLinkTextSource.kt index a9e7ae225a..7356ac0b31 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/TextLinkTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/TextLinkTextSource.kt @@ -5,9 +5,9 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.linkHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.linkMarkdown class TextLinkTextSource( - sourceString: String, + override val rawSource: String, url: String ) : TextSource { - override val asMarkdownSource: String = sourceString.linkMarkdown(url) - override val asHtmlSource: String = sourceString.linkHTML(url) + override val asMarkdownSource: String = rawSource.linkMarkdown(url) + override val asHtmlSource: String = rawSource.linkHTML(url) } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/TextMentionTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/TextMentionTextSource.kt index 720436e8d7..3cc4643d55 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/TextMentionTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/TextMentionTextSource.kt @@ -7,15 +7,9 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.mentionMarkdown class TextMentionTextSource( - sourceString: String, + override val rawSource: String, privateChat: PrivateChat ) : TextSource { - @Deprecated("Deprecated due to the fact that there is more common constructor") - constructor( - sourceString: String, - user: User - ) : this(sourceString, user as PrivateChat) - - override val asMarkdownSource: String = sourceString.mentionMarkdown(privateChat.id) - override val asHtmlSource: String = sourceString.mentionHTML(privateChat.id) + override val asMarkdownSource: String = rawSource.mentionMarkdown(privateChat.id) + override val asHtmlSource: String = rawSource.mentionHTML(privateChat.id) } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/URLTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/URLTextSource.kt index 581af0f015..f96a169373 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/URLTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/URLTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.linkHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.linkMarkdown class URLTextSource( - sourceString: String + override val rawSource: String ) : TextSource{ - override val asMarkdownSource: String = sourceString.linkMarkdown(sourceString) - override val asHtmlSource: String = sourceString.linkHTML(sourceString) + override val asMarkdownSource: String + get() = rawSource.linkMarkdown(rawSource) + override val asHtmlSource: String + get() = rawSource.linkHTML(rawSource) } diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/UnderlineTextSource.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/UnderlineTextSource.kt index f0d6ed4904..d7cef33cdc 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/UnderlineTextSource.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/types/MessageEntity/textsources/UnderlineTextSource.kt @@ -5,8 +5,10 @@ import com.github.insanusmokrassar.TelegramBotAPI.utils.underlineHTML import com.github.insanusmokrassar.TelegramBotAPI.utils.underlineMarkdown class UnderlineTextSource( - sourceString: String + override val rawSource: String ) : TextSource { - override val asMarkdownSource: String = sourceString.underlineMarkdown() - override val asHtmlSource: String = sourceString.underlineHTML() + override val asMarkdownSource: String + get() = rawSource.underlineMarkdown() + override val asHtmlSource: String + get() = rawSource.underlineHTML() } \ No newline at end of file diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StringFormatting.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StringFormatting.kt index 7a1c6e7238..d9c5266817 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StringFormatting.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/StringFormatting.kt @@ -14,12 +14,14 @@ const val htmlBoldControl = "b" const val htmlItalicControl = "i" const val htmlCodeControl = "code" const val htmlPreControl = "pre" +const val htmlUnderlineControl = "u" +const val htmlStrikethroughControl = "s" -private infix fun String.markdownDefault(controlSymbol: String) = "$controlSymbol$this$controlSymbol" -private infix fun String.htmlDefault(controlSymbol: String) = "<$controlSymbol>$this" +private fun String.markdownDefault(controlSymbol: String) = "$controlSymbol$this$controlSymbol" +private fun String.htmlDefault(controlSymbol: String) = "<$controlSymbol>$this" -infix fun String.linkMarkdown(link: String): String = "[$this]($link)" -infix fun String.linkHTML(link: String): String = "$this" +fun String.linkMarkdown(link: String): String = "[$this]($link)" +fun String.linkHTML(link: String): String = "$this" fun String.boldMarkdown(): String = markdownDefault(markdownBoldControl) @@ -45,32 +47,32 @@ fun String.emailHTML(): String = linkHTML("mailto://$this") * Crutch for support of strikethrough in default markdown. Simply add modifier, but it will not look like correct */ fun String.strikethroughMarkdown(): String = map { it + "\u0336" }.joinToString("") -fun String.strikethroughHTML(): String = htmlDefault("s") +fun String.strikethroughHTML(): String = htmlDefault(htmlStrikethroughControl) /** * Crutch for support of underline in default markdown. Simply add modifier, but it will not look like correct */ fun String.underlineMarkdown(): String = map { it + "\u0347" }.joinToString("") -fun String.underlineHTML(): String = htmlDefault("u") +fun String.underlineHTML(): String = htmlDefault(htmlUnderlineControl) -private inline infix fun String.mention(adapt: String.() -> String): String = if (startsWith("@")) { +private inline fun String.mention(adapt: String.() -> String): String = if (startsWith("@")) { this } else { "@${adapt()}" } -private inline infix fun String.hashTag(adapt: String.() -> String): String = if (startsWith("#")) { +private inline fun String.hashTag(adapt: String.() -> String): String = if (startsWith("#")) { this } else { "#${adapt()}" } -infix fun String.mentionMarkdown(userId: UserId): String = linkMarkdown(userId.link) -infix fun String.mentionHTML(userId: UserId): String = linkHTML(userId.link) +fun String.mentionMarkdown(userId: UserId): String = linkMarkdown(userId.link) +fun String.mentionHTML(userId: UserId): String = linkHTML(userId.link) fun String.mentionMarkdown(): String = mention(String::toMarkdown) diff --git a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/String.kt b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/String.kt index 9c2c4d9c33..040c6aa846 100644 --- a/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/String.kt +++ b/src/commonMain/kotlin/com/github/insanusmokrassar/TelegramBotAPI/utils/extensions/String.kt @@ -7,6 +7,12 @@ fun String.toMarkdown(): String { ).replace( "_", "\\_" + ).replace( + "`", + "\\`" + ).replace( + "[", + "\\[" ) }