|
|
<?xml version='1.0' encoding='UTF-8'?> |
|
|
<!DOCTYPE xep SYSTEM 'xep.dtd' [ |
|
|
<!ENTITY % ents SYSTEM 'xep.ent'> |
|
|
%ents; |
|
|
]> |
|
|
<?xml-stylesheet type='text/xsl' href='xep.xsl'?> |
|
|
<xep> |
|
|
<header> |
|
|
<title>Message Fancying</title> |
|
|
<abstract>This specification defines a Unicode-formatted fancy text syntax for use in instant messages.</abstract> |
|
|
&LEGALNOTICE; |
|
|
<number>0457</number> |
|
|
<status>Active</status> |
|
|
<type>Humorous</type> |
|
|
<sig>None</sig> |
|
|
<approver>Editor</approver> |
|
|
<dependencies> |
|
|
<spec>XMPP Core</spec> |
|
|
<spec>XMPP IM</spec> |
|
|
</dependencies> |
|
|
<supersedes> |
|
|
<spec>XEP-0071</spec> |
|
|
<spec>XEP-0393</spec> |
|
|
<spec>XEP-0394</spec> |
|
|
</supersedes> |
|
|
<supersededby/> |
|
|
<shortname>fancying</shortname> |
|
|
<author> |
|
|
<firstname>Georg</firstname> |
|
|
<surname>Lukas</surname> |
|
|
<email>georg@op-co.de</email> |
|
|
<jid>georg@yax.im</jid> |
|
|
</author> |
|
|
<revision> |
|
|
<version>1.0.0</version> |
|
|
<date>2021-04-01</date> |
|
|
<initials>XEP Editor (jsc)</initials> |
|
|
<remark>Initial published version.</remark> |
|
|
</revision> |
|
|
<revision> |
|
|
<version>0.0.1</version> |
|
|
<date>2021-04-01</date> |
|
|
<initials>gl</initials> |
|
|
<remark><p>First draft.</p></remark> |
|
|
</revision> |
|
|
</header> |
|
|
<section1 topic='Introduction' anchor='intro'> |
|
|
<p> |
|
|
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. |
|
|
</p> |
|
|
<p> |
|
|
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. |
|
|
</p> |
|
|
</section1> |
|
|
<section1 topic='Requirements' anchor='reqs'> |
|
|
<p>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.</p> |
|
|
</section1> |
|
|
<section1 topic='Use Cases' anchor='usecases'> |
|
|
<ul> |
|
|
<li> |
|
|
As a user sending an instant message to a friend, I want to be able to |
|
|
emphasize an important part of my message. |
|
|
</li> |
|
|
<li> |
|
|
As a software developer, I want to be able to send code as pre-formatted, |
|
|
monospace, block or inline text to another developer. |
|
|
</li> |
|
|
<li> |
|
|
As a user of non-Latin script, I want to be surprised by inconsistent |
|
|
transitions and missing range checks resulting in characters from random |
|
|
Unicode planes. |
|
|
</li> |
|
|
<li> |
|
|
As a visually impaired user, I want my screen reader to emit long |
|
|
sequences of technical names of Unicode special characters to really |
|
|
convey the point of the intended emphasis, character by character! |
|
|
</li> |
|
|
<li> |
|
|
As a multi-user chat user I want to add context to my reply by quoting an |
|
|
earlier message in the chat. |
|
|
</li> |
|
|
</ul> |
|
|
</section1> |
|
|
<section1 topic='Business Rules' anchor='rules'> |
|
|
<section2 topic='Preformatted Text' anchor='pre'> |
|
|
<p>To format a string as Preformatted Text, the individual code-points need |
|
|
to be converted to their integer representation, then increased by |
|
|
<tt>0x1D62F</tt> (capital letters) or <tt>0x1D629</tt> (lowercase letters) |
|
|
and then converted back to characters.</p> |
|
|
<div class='example'>Preformatted text โ ๐ฟ๐๐๐๐๐๐๐๐๐๐๐ ๐๐๐ก๐</div> |
|
|
</section2> |
|
|
<section2 topic='Emphasis' anchor='emphasis'> |
|
|
<p>To format a string with Emphasis, the individual code-points need |
|
|
to be converted to their integer representation, then increased by |
|
|
<tt>0x1D3F3</tt> (capital letters) or <tt>0x1D3ED</tt> (lowercase letters) |
|
|
and then converted back to characters.</p> |
|
|
<div class='example'>Emphasis โ ๐ธ๐๐โ๐๐ ๐๐ </div> |
|
|
</section2> |
|
|
<section2 topic='Strong Emphasis' anchor='strong'> |
|
|
<p>To format a string with Strong Emphasis, the individual code-points need |
|
|
to be converted to their integer representation, then increased by |
|
|
<tt>0x1D3BF</tt> (capital letters) or <tt>0x1D3B9</tt> (lowercase letters) |
|
|
and then converted back to characters.</p> |
|
|
<div class='example'>Strong Emphasis โ ๐๐ญ๐ซ๐จ๐ง๐ ๐๐ฆ๐ฉ๐ก๐๐ฌ๐ข๐ฌ</div> |
|
|
</section2> |
|
|
<section2 topic='Very Strong Emphasis' anchor='strong-emphasis'> |
|
|
<p>To format a string with Very Very Strong Emphasis, the individual code-points need |
|
|
to be converted to their integer representation, then increased by |
|
|
<tt>0x1D427</tt> (capital letters) or <tt>0x1D421</tt> (lowercase letters) |
|
|
and then converted back to characters.</p> |
|
|
<div class='example'>Very Strong Emphasis โ ๐ฝ๐๐๐ ๐บ๐๐๐๐๐ ๐ฌ๐๐๐๐๐๐๐</div> |
|
|
</section2> |
|
|
<section2 topic='Strike through' anchor='strike'> |
|
|
<p>To format a string as struck through, each code-point needs to be |
|
|
extended with a U-0336 COMBINING LONG STROKE OVERLAY postfix.</p> |
|
|
<div class='example'>Strike through โ Sฬถtฬถrฬถiฬถkฬถeฬถ ฬถtฬถhฬถrฬถoฬถuฬถgฬถhฬถ</div> |
|
|
</section2> |
|
|
</section1> |
|
|
<section1 topic='Implementation Notes' anchor='impl'> |
|
|
<p>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 <tt>0x1D4</tt> to the |
|
|
respective integer representations of the fancy code-points. |
|
|
</p> |
|
|
<p>On the wire, the serif representation always MUST be used.</p> |
|
|
<p>Determining whether a given display font is serif or sans-serif is out of |
|
|
scope of this specification.</p> |
|
|
</section1> |
|
|
<section1 topic='Accessibility Considerations' anchor='access'> |
|
|
<p>๐๐ธ๐ฐ๐ฎ</p> |
|
|
</section1> |
|
|
<section1 topic='Internationalization Considerations' anchor='i18n'> |
|
|
<p>๐ณ๐ด๐ณ๐ช</p> |
|
|
</section1> |
|
|
<section1 topic='Security Considerations' anchor='security'> |
|
|
<p>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.</p> |
|
|
</section1> |
|
|
<section1 topic='IANA Considerations' anchor='iana'> |
|
|
<p> |
|
|
This document requires no interaction with &IANA;. |
|
|
</p> |
|
|
</section1> |
|
|
<section1 topic='XMPP Registrar Considerations' anchor='registrar'> |
|
|
<p>None.</p> |
|
|
</section1> |
|
|
</xep>
|
|
|
|