mirror of
https://github.com/moparisthebest/xeps
synced 2024-12-22 07:38:52 -05:00
50d32f9151
Approving body is Editor because of the track.
163 lines
6.9 KiB
XML
163 lines
6.9 KiB
XML
<?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>
|