init
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
This commit is contained in:
225
Telegram/SourceFiles/lang/lang_text_entity.h
Normal file
225
Telegram/SourceFiles/lang/lang_text_entity.h
Normal file
@@ -0,0 +1,225 @@
|
||||
/*
|
||||
This file is part of Telegram Desktop,
|
||||
the official desktop application for the Telegram messaging service.
|
||||
|
||||
For license and copyright information please follow this link:
|
||||
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "ui/text/text_entity.h"
|
||||
#include "ui/text/text_utilities.h"
|
||||
|
||||
namespace Lang {
|
||||
|
||||
template <typename ResultString>
|
||||
struct StartReplacements;
|
||||
|
||||
template <>
|
||||
struct StartReplacements<TextWithEntities> {
|
||||
static inline TextWithEntities Call(QString &&langString) {
|
||||
return { std::move(langString), EntitiesInText() };
|
||||
}
|
||||
};
|
||||
|
||||
template <typename ResultString>
|
||||
struct ReplaceTag;
|
||||
|
||||
template <>
|
||||
struct ReplaceTag<TextWithEntities> {
|
||||
static TextWithEntities Call(TextWithEntities &&original, ushort tag, const TextWithEntities &replacement);
|
||||
static TextWithEntities Replace(TextWithEntities &&original, const TextWithEntities &replacement, int start);
|
||||
|
||||
};
|
||||
|
||||
} // namespace Lang
|
||||
|
||||
namespace tr {
|
||||
namespace details {
|
||||
|
||||
struct UpperProjection {
|
||||
[[nodiscard]] QString operator()(const QString &value) const {
|
||||
return value.toUpper();
|
||||
}
|
||||
[[nodiscard]] QString operator()(QString &&value) const {
|
||||
return std::move(value).toUpper();
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value) const {
|
||||
return { value.text.toUpper(), value.entities };
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value) const {
|
||||
return {
|
||||
std::move(value.text).toUpper(),
|
||||
std::move(value.entities) };
|
||||
}
|
||||
};
|
||||
|
||||
struct MarkedProjection {
|
||||
[[nodiscard]] TextWithEntities operator()() const {
|
||||
return {};
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(const QString &value) const {
|
||||
return TextWithEntities{ value };
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(QString &&value) const {
|
||||
return TextWithEntities{ std::move(value) };
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value) const {
|
||||
return value;
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value) const {
|
||||
return std::move(value);
|
||||
}
|
||||
};
|
||||
|
||||
struct RichProjection {
|
||||
[[nodiscard]] TextWithEntities operator()(const QString &value) const {
|
||||
return Ui::Text::RichLangValue(value);
|
||||
}
|
||||
};
|
||||
|
||||
struct BoldProjection {
|
||||
[[nodiscard]] TextWithEntities operator()(const QString &value) const {
|
||||
return Ui::Text::Bold(value);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value) const {
|
||||
return Ui::Text::Wrapped(value, EntityType::Bold);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value) const {
|
||||
return Ui::Text::Wrapped(std::move(value), EntityType::Bold);
|
||||
}
|
||||
};
|
||||
|
||||
struct SemiboldProjection {
|
||||
[[nodiscard]] TextWithEntities operator()(const QString &value) const {
|
||||
return Ui::Text::Semibold(value);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value) const {
|
||||
return Ui::Text::Wrapped(value, EntityType::Semibold);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value) const {
|
||||
return Ui::Text::Wrapped(std::move(value), EntityType::Semibold);
|
||||
}
|
||||
};
|
||||
|
||||
struct ItalicProjection {
|
||||
[[nodiscard]] TextWithEntities operator()(const QString &value) const {
|
||||
return Ui::Text::Italic(value);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value) const {
|
||||
return Ui::Text::Wrapped(value, EntityType::Italic);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value) const {
|
||||
return Ui::Text::Wrapped(std::move(value), EntityType::Italic);
|
||||
}
|
||||
};
|
||||
|
||||
struct UnderlineProjection {
|
||||
[[nodiscard]] TextWithEntities operator()(const QString &value) const {
|
||||
return Ui::Text::Underline(value);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value) const {
|
||||
return Ui::Text::Wrapped(value, EntityType::Underline);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value) const {
|
||||
return Ui::Text::Wrapped(std::move(value), EntityType::Underline);
|
||||
}
|
||||
};
|
||||
|
||||
struct StrikeOutProjection {
|
||||
[[nodiscard]] TextWithEntities operator()(const QString &value) const {
|
||||
return Ui::Text::StrikeOut(value);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value) const {
|
||||
return Ui::Text::Wrapped(value, EntityType::StrikeOut);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value) const {
|
||||
return Ui::Text::Wrapped(std::move(value), EntityType::StrikeOut);
|
||||
}
|
||||
};
|
||||
|
||||
struct LinkProjection {
|
||||
[[nodiscard]] TextWithEntities operator()(const QString &value) const {
|
||||
return Ui::Text::Link(value);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const QString &value,
|
||||
const QString &url) const {
|
||||
return Ui::Text::Link(value, url);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const QString &value,
|
||||
int index) const {
|
||||
return Ui::Text::Link(value, index);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value) const {
|
||||
return Ui::Text::Link(value);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value,
|
||||
const QString &url) const {
|
||||
return Ui::Text::Link(value, url);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
const TextWithEntities &value,
|
||||
int index) const {
|
||||
return Ui::Text::Link(value, index);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value) const {
|
||||
return Ui::Text::Link(std::move(value));
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value,
|
||||
const QString &url) const {
|
||||
return Ui::Text::Link(std::move(value), url);
|
||||
}
|
||||
[[nodiscard]] TextWithEntities operator()(
|
||||
TextWithEntities &&value,
|
||||
int index) const {
|
||||
return Ui::Text::Link(std::move(value), index);
|
||||
}
|
||||
};
|
||||
|
||||
struct UrlProjection {
|
||||
[[nodiscard]] auto operator()(const QString &url) const {
|
||||
return [url](auto &&text) {
|
||||
return Ui::Text::Link(std::forward<decltype(text)>(text), url);
|
||||
};
|
||||
}
|
||||
[[nodiscard]] auto operator()(int index) const {
|
||||
return [index](auto &&text) {
|
||||
return Ui::Text::Link(std::forward<decltype(text)>(text), index);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace details
|
||||
|
||||
inline constexpr details::UpperProjection upper{};
|
||||
inline constexpr details::MarkedProjection marked{};
|
||||
inline constexpr details::RichProjection rich{};
|
||||
inline constexpr details::BoldProjection bold{};
|
||||
inline constexpr details::SemiboldProjection semibold{};
|
||||
inline constexpr details::ItalicProjection italic{};
|
||||
inline constexpr details::UnderlineProjection underline{};
|
||||
inline constexpr details::StrikeOutProjection strikeout{};
|
||||
inline constexpr details::LinkProjection link{};
|
||||
inline constexpr details::UrlProjection url{};
|
||||
|
||||
} // namespace tr
|
||||
Reference in New Issue
Block a user