text_utilities.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // This file is part of Desktop App Toolkit,
  2. // a set of libraries for developing nice desktop applications.
  3. //
  4. // For license and copyright information please follow this link:
  5. // https://github.com/desktop-app/legal/blob/master/LEGAL
  6. //
  7. #pragma once
  8. #include "ui/text/text_entity.h"
  9. namespace style {
  10. struct IconEmoji;
  11. } // namespace style
  12. namespace Ui {
  13. namespace Text {
  14. namespace details {
  15. struct ToUpperType {
  16. inline QString operator()(const QString &text) const {
  17. return text.toUpper();
  18. }
  19. inline QString operator()(QString &&text) const {
  20. return std::move(text).toUpper();
  21. }
  22. };
  23. } // namespace details
  24. class CustomEmoji;
  25. inline constexpr auto Upper = details::ToUpperType{};
  26. [[nodiscard]] TextWithEntities Bold(const QString &text);
  27. [[nodiscard]] TextWithEntities Semibold(const QString &text);
  28. [[nodiscard]] TextWithEntities Italic(const QString &text);
  29. [[nodiscard]] TextWithEntities Link(
  30. const QString &text,
  31. const QString &url = u"internal:action"_q);
  32. [[nodiscard]] TextWithEntities Link(const QString &text, int index);
  33. [[nodiscard]] TextWithEntities Link(
  34. TextWithEntities text,
  35. const QString &url = u"internal:action"_q);
  36. [[nodiscard]] TextWithEntities Link(TextWithEntities text, int index);
  37. [[nodiscard]] TextWithEntities Colorized(
  38. const QString &text,
  39. int index = 0);
  40. [[nodiscard]] TextWithEntities Colorized(
  41. TextWithEntities text,
  42. int index = 0);
  43. [[nodiscard]] TextWithEntities Wrapped(
  44. TextWithEntities text,
  45. EntityType type,
  46. const QString &data = QString());
  47. [[nodiscard]] TextWithEntities RichLangValue(const QString &text);
  48. [[nodiscard]] inline TextWithEntities WithEntities(const QString &text) {
  49. return { text };
  50. }
  51. [[nodiscard]] TextWithEntities SingleCustomEmoji(
  52. QString data,
  53. QString text = QString());
  54. [[nodiscard]] TextWithEntities IconEmoji(
  55. not_null<const style::IconEmoji*> emoji,
  56. QString text = QString());
  57. [[nodiscard]] std::unique_ptr<CustomEmoji> TryMakeSimpleEmoji(
  58. QStringView data);
  59. [[nodiscard]] inline auto ToUpper() {
  60. return rpl::map(Upper);
  61. }
  62. [[nodiscard]] inline auto ToBold() {
  63. return rpl::map(Bold);
  64. }
  65. [[nodiscard]] inline auto ToSemibold() {
  66. return rpl::map(Semibold);
  67. }
  68. [[nodiscard]] inline auto ToItalic() {
  69. return rpl::map(Italic);
  70. }
  71. [[nodiscard]] inline auto ToLink(const QString &url = "internal:action") {
  72. return rpl::map([=](const auto &text) {
  73. return Link(text, url);
  74. });
  75. }
  76. [[nodiscard]] inline auto ToRichLangValue() {
  77. return rpl::map(RichLangValue);
  78. }
  79. [[nodiscard]] inline auto ToWithEntities() {
  80. return rpl::map(WithEntities);
  81. }
  82. [[nodiscard]] TextWithEntities Mid(
  83. const TextWithEntities &text,
  84. int position,
  85. int n = -1);
  86. [[nodiscard]] TextWithEntities Filtered(
  87. const TextWithEntities &result,
  88. const std::vector<EntityType> &types);
  89. [[nodiscard]] QString FixAmpersandInAction(QString text);
  90. [[nodiscard]] TextWithEntities WrapEmailPattern(const QString &);
  91. } // namespace Text
  92. } // namespace Ui