%ents; ]>
Message Fancying This specification defines a Unicode-formatted fancy text syntax for use in instant messages. &LEGALNOTICE; 0457 Active Humorous None Editor XMPP Core XMPP IM XEP-0071 XEP-0393 XEP-0394 fancying Georg Lukas georg@op-co.de georg@yax.im 1.0.0 2021-04-01 XEP Editor (jsc) Initial published version. 0.0.1 2021-04-01 gl

First draft.

XMPP-based Instant Messages has suffered from a lack of proper message styling mechanisms. After abandoning &xep0071; for its horrible security track record, &xep0393; and &xep0394; were proposed as replacements, but neither was able to gain sufficient traction to become the default styling mechanism.

This specification fills the gap by formally specifying the Unicode-based formatting that is currently fancied on Social Media and micro-blogging as an XMPP standard for Instant Messaging. As XMPP is based on UTF-8, messages formatted with this mechanism are immediately visible on all receiving clients. Simple third-party tools can be used for writing messages until this specification is integrated into the IM message input boxes.

This specification relies on Unicode features introduced in the 3.1 specification. As XMPP implementations are required to support Unicode 3.2 for StringPrep during SASL authentication, no new requirements arise.

To format a string as Preformatted Text, the individual code-points need to be converted to their integer representation, then increased by 0x1D62F (capital letters) or 0x1D629 (lowercase letters) and then converted back to characters.

Preformatted text → ð™ŋ𝚛𝚎𝚏𝚘𝚛𝚖𝚊𝚝𝚝𝚎𝚍 ðšðšŽðšĄðš

To format a string with Emphasis, the individual code-points need to be converted to their integer representation, then increased by 0x1D3F3 (capital letters) or 0x1D3ED (lowercase letters) and then converted back to characters.

Emphasis → ðļ𝑚𝑝ℎ𝑎𝑠𝑖𝑠

To format a string with Strong Emphasis, the individual code-points need to be converted to their integer representation, then increased by 0x1D3BF (capital letters) or 0x1D3B9 (lowercase letters) and then converted back to characters.

Strong Emphasis → 𝐒𝐭ðŦðĻ𝐧𝐠 𝐄ðĶðĐðĄðšðŽðĒ𝐎

To format a string with Very Very Strong Emphasis, the individual code-points need to be converted to their integer representation, then increased by 0x1D427 (capital letters) or 0x1D421 (lowercase letters) and then converted back to characters.

Very Strong Emphasis → ð‘―ð’†ð’“ð’š 𝑚𝒕𝒓𝒐𝒏𝒈 𝑎𝒎𝒑𝒉𝒂𝒔𝒊𝒔

To format a string as struck through, each code-point needs to be extended with a U-0336 COMBINING LONG STROKE OVERLAY postfix.

Strike through → SĖķtĖķrĖķiĖķkĖķeĖķ ĖķtĖķhĖķrĖķoĖķuĖķgĖķhĖķ

Some clients will use a serif-less font instead of a serif font to display instant messages, or even allow the user to choose an arbitrary font. The formatting defined in this document assumes the use of serif fonts, however. If a formatted text is to be displayed in a context that is not supposed to render serifs, the displaying implementation MUST add 0x1D4 to the respective integer representations of the fancy code-points.

On the wire, the serif representation always MUST be used.

Determining whether a given display font is serif or sans-serif is out of scope of this specification.

𝞜ðžļ𝞰ðžŪ

ðŸ‡ģðŸ‡īðŸ‡ģ🇊

The rendering of fonts is a complex task performed in the most inner guts of the operating system. Over the last decades, various exploits have been discovered in all major operating systems. Unfortunately, fixing those issues is far beyond the abilities of a simple XMPP client.

This document requires no interaction with &IANA;.

None.