<div dir="ltr"><div dir="ltr" class="gmail_attr">пн, 21 окт. 2019 г. в 19:08, Jonathan Lennox <<a href="mailto:lennox@cs.columbia.edu">lennox@cs.columbia.edu</a>>:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
The right concept here is probably "grapheme clusters", as defined in<br>
Unicode Standard Annex 29.  ICU has support for this.<br></blockquote></div><div><br></div><div>We have succeded implementing reference processing on three clients and on the server side. And not one of the developers had problems calculating the necessary positions. You just handle every emoji as one glyph.<br><br>In addition we made a XMPP bot with which you can test different references: markup, string with escaped text and different media. You can try it <a href="mailto:xmpp%3Adevbot@dev.xabber.com">xmpp:devbot@dev.xabber.com</a><br><br>For instance, if you have such text : "😁😂😆 funny comment with some bold text!" and you want to make it in some part bold, you should count every symbol in this text and in the end you will get such message to send:<br><br><br><message type="chat" id="1" from="<a href="http://juliet@capulet.it/phone">juliet@capulet.it/phone</a>" to="<a href="mailto:romeo@montague.it">romeo@montague.it</a>"><br><reference begin="28" end="31" type="markup"><br><bold/><br></reference><br><body>😁😂😆 funny comment with some bold text!</body><br></message><br><br>Each of these three emojis is counted as 1 symbol.<br><div><br></div><div>The client will render:</div><div><div><img src="cid:ii_k24t750k0" alt="Screenshot_2019-10-24 Xabber Web.png" width="284" height="27"><br></div></div><div><br></div>More complex example with unicode combining characters: "Test ◌⃤ BOLD italic usual text". We count this graphem as one character. The message should be like this:<br><br><message from="<a href="http://romeo@montague.it/desktop">romeo@montague.it/desktop</a>" to="<a href="http://juliet@capulet.it/phone">juliet@capulet.it/phone</a>" type="chat" id="2"><br><reference begin="8" end="12" type="markup"><br><bold/><br></reference><br><reference begin="13" end="19" type="markup"><br><italic/><br></reference><br><body>Test ◌⃤ BOLD italic usual text</body><br></message><br><br>The client will render:<br clear="all"><div><br></div><div><div><img src="cid:ii_k24t7iqr1" alt="Screenshot_2019-10-24 Xabber Web(1).png" width="184" height="18"></div><div><br></div><div>In addition we made a XMPP bot with which you can test different 
references: markup, string with escaped text and different media 
content. You can try it here <a href="mailto:xmpp%3Adevbot@dev.xabber.com" target="_blank">xmpp:devbot@dev.xabber.com</a>.</div></div><div><br></div>-- <br></div><div dir="ltr" class="gmail_signature"><div dir="ltr"><span><font color="#888888"><div><span style="font-size:9.5pt;font-family:Arial;color:rgb(34,34,34);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Andrey Gagarin</span></div><div><span style="font-size:9.5pt;font-family:Arial;color:rgb(34,34,34);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Developer, <span style="color:rgb(255,0,0)">Red</span>solution OÜ</span></div></font></span></div></div></div>