Telegram-iOS/submodules/TelegramCore/FlatSerialization/Models/RichText.fbs
isaac 8b9f498d53 RichText.textSpoiler: dust overlay + tap-to-reveal in rich-data bubbles
Add the RichText.textSpoiler case end-to-end: model + Postbox coding,
FlatBuffers schema/codec, and Api.RichText parsing/serialization (lossless).
Display attaches the spoiler attribute, collects per-line spoiler rects in
the V2 layout, clips obscured glyphs and draws an energy-gated dust overlay
in the V2 text view, propagates the reveal flag across the nested V2 tree
(building dust for freshly-created text views), and wires tap-to-reveal
routing in the rich-data bubble.

Also seeds the streaming reveal cursor across chunk rebuilds and refines
status date positioning.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 22:12:47 +04:00

157 lines
2.8 KiB
Text

include "MediaId.fbs";
include "PixelDimensions.fbs";
namespace TelegramCore;
union RichText_Value {
RichText_Empty,
RichText_Plain,
RichText_Bold,
RichText_Italic,
RichText_Underline,
RichText_Strikethrough,
RichText_Fixed,
RichText_Url,
RichText_Email,
RichText_Concat,
RichText_Subscript,
RichText_Superscript,
RichText_Marked,
RichText_Phone,
RichText_Image,
RichText_Anchor,
RichText_Formula,
RichText_CustomEmoji,
RichText_AutoEmail,
RichText_AutoPhone,
RichText_AutoUrl,
RichText_BankCard,
RichText_BotCommand,
RichText_Cashtag,
RichText_Hashtag,
RichText_Mention,
RichText_MentionName,
RichText_Spoiler
}
table RichText {
value:RichText_Value (id: 1, required);
}
table RichText_Empty {}
table RichText_Plain {
text:string (id: 0, required);
}
table RichText_Bold {
text:RichText (id: 0, required);
}
table RichText_Italic {
text:RichText (id: 0, required);
}
table RichText_Underline {
text:RichText (id: 0, required);
}
table RichText_Strikethrough {
text:RichText (id: 0, required);
}
table RichText_Fixed {
text:RichText (id: 0, required);
}
table RichText_Url {
text:RichText (id: 0, required);
url:string (id: 1, required);
webpageId:MediaId (id: 2);
}
table RichText_Email {
text:RichText (id: 0, required);
email:string (id: 1, required);
}
table RichText_Concat {
texts:[RichText] (id: 0, required);
}
table RichText_Subscript {
text:RichText (id: 0, required);
}
table RichText_Superscript {
text:RichText (id: 0, required);
}
table RichText_Marked {
text:RichText (id: 0, required);
}
table RichText_Phone {
text:RichText (id: 0, required);
phone:string (id: 1, required);
}
table RichText_Image {
id:MediaId (id: 0, required);
dimensions:PixelDimensions (id: 1, required);
}
table RichText_Anchor {
text:RichText (id: 0, required);
name:string (id: 1, required);
}
table RichText_Formula {
latex:string (id: 0, required);
}
table RichText_CustomEmoji {
fileId:long (id: 0);
alt:string (id: 1, required);
}
table RichText_AutoEmail {
text:RichText (id: 0, required);
}
table RichText_AutoPhone {
text:RichText (id: 0, required);
}
table RichText_AutoUrl {
text:RichText (id: 0, required);
}
table RichText_BankCard {
text:RichText (id: 0, required);
}
table RichText_BotCommand {
text:RichText (id: 0, required);
}
table RichText_Cashtag {
text:RichText (id: 0, required);
}
table RichText_Hashtag {
text:RichText (id: 0, required);
}
table RichText_Mention {
text:RichText (id: 0, required);
}
table RichText_MentionName {
text:RichText (id: 0, required);
peerId:long (id: 1);
}
table RichText_Spoiler {
text:RichText (id: 0, required);
}