1

Voilà, j'ai fait des packs de smileys yAronet pour Colloquy et Adium (un peu plus de 320 smileys au total). Pour ça, j'ai créé un script shell qui prend en argument un dossier plein de gif et crée les 2 packs ^^

je les ai mis à disposition Ici , ainsi que le script utilisé smile
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2

Rhaaaa toi je t'aime flan love

Merci (tu mépargne cette peine de le faire moi meme wink) ^^


Par contre sur ta prochaine génération des paquest, si tu pouvais mettre #peur# wink
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

3

Ah ok ^^ De toute façon, je sais qu'il y a encore quelques corrections à faire smile Mais ça devrait venir dans la semaine smile
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4

J'ai formatté mon mac la semaine dernière et j'avais pommé ce pack de smiley, une première version faite il y a plusieurs années par Bob. Merci pour ce nouveau smile

5

Émoticônes pour Colloquy
Lien direct Il y a un bug, les smileys de la forme #smiley# sont affichés en double


Je vois qu'il y a le même problème. Un bug de Colloquy ? C'est Open Source non ?

6

Peut-être moi qui l'ai mal fait.. je vais essayer de m'y remettre ce soir smile
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

7

Kim avait eu le meme bug...
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

8

Je suis allé regardé le code, et ça donne ça :
      <span class="emoticon airplane">
        <samp>
          <a href="irc://irc.worldnet.net/#airplane">#airplane</a>
        </samp>
      </span>
      <span class="emoticon airplane">
        <samp>#</samp>
      </span>

C'est donc bien un bug de Colloquy

Il faudrait dire au second span de ne pas s'afficher, mais je ne vois pas trop comment dire ça en css sad
ou alors, dire au span.emoticon.airplane de s'afficher uniquement s'il y a un a dedans sad

Sinon, j'ai mis les packs à jour, avec un certain nombre de raccourcis msn classiques ^^ (genre (a) pour #ange# )
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

9

j'ai contourné de façon moche, qui fait qu'on ne peut plus utiliser 2 deux fois de suite le même smiley (quand il a un code en #smiley# )
nouvelle mise à jour ^^

play: none; }
j'ai fait un .emoticon.smiley + .emoticon.smiley {
        dis

pour chaque smiley cheeky
Microbug (./5) :
Un bug de Colloquy ? C'est Open Source non ?

oui http://colloquy.info/project/ticket/1274
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

10

./7 : on avait constaté ça à l'époque. J'avoue ne jamais avoir ouvert de ticket à ce sujet.
avatarIl n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

11

par pure curiosité, je vais essayer de voir si je trouve le bout de code qui fait ça wink
avatarIl n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

12

Cool happy
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

13

ça se passe là dedans :
- (void) performEmoticonSubstitution:(NSMutableAttributedString *) string {      if( ! [string length] ) return;      NSCharacterSet *escapeSet = [NSCharacterSet characterSetWithCharactersInString:@"^[]{}()\.$*+?|"];      NSEnumerator *keyEnumerator = [[self emoticonMappings] keyEnumerator];      NSEnumerator *objEnumerator = [[self emoticonMappings] objectEnumerator];      NSEnumerator *srcEnumerator = nil;      NSString *str = nil;      NSString *key = nil;      NSArray *obj = nil;      while( ( key = [keyEnumerator nextObject] ) && ( obj = [objEnumerator nextObject] ) ) {           srcEnumerator = [obj objectEnumerator];           while( ( str = [srcEnumerator nextObject] ) ) {                NSMutableString *search = [str mutableCopy];                [search escapeCharactersInSet:escapeSet];                AGRegex *regex = [[AGRegex alloc] initWithPattern:[NSString stringWithFormat:@"(?<=\s|^)%@(?=\s|$)", search]];                NSArray *matches = [regex findAllInString:[string string]];                NSEnumerator *enumerator = [matches objectEnumerator];                AGRegexMatch *match = nil;                while( ( match = [enumerator nextObject] ) ) {                     NSRange foundRange = [match range];                     NSString *startHTML = [string attribute:@"XHTMLStart" atIndex:foundRange.location effectiveRange:NULL];                     NSString *endHTML = [string attribute:@"XHTMLEnd" atIndex:foundRange.location effectiveRange:NULL];                     if( ! startHTML ) startHTML = @"";                     if( ! endHTML ) endHTML = @"";                     [string addAttribute:@"XHTMLStart" value:[startHTML stringByAppendingFormat:@"<span class=\"emoticon %@\"><samp>", key] range:foundRange];                     [string addAttribute:@"XHTMLEnd" value:[@"</samp></span>" stringByAppendingString:endHTML] range:foundRange];                }                [search release];                [regex release];           }      } }

reste à trouver l'erreur wink

note : utiliser un éditeur adéquate fait du bien à ses yeux, le viewer ici est pas adapté wink
avatarIl n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

14

Mais il ne suffirait pas de faire la substitution des smileys avant la recherche automatique des noms de chans ?
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

15

pour l'ordre effectivement il commence par la substitution des chans :

	if( ! [[NSUserDefaults standardUserDefaults] boolForKey:@"MVChatDisableLinkHighlighting"] ) {
		[messageString makeLinkAttributesAutomatically];
		[self _hyperlinkRoomNames:messageString];
	}

	[[self emoticons] performEmoticonSubstitution:messageString];


pour hyperlinkRoomNames :
- (void) _hyperlinkRoomNames:(NSMutableAttributedString *) message {      if( ! message || ! [message string] ) return;      if( [[self connection] type] != MVChatConnectionIRCType ) return;      // catch IRC rooms like "#room" but not HTML colors like "#ab12ef" nor HTML entities like "&#135;" or "&"      AGRegex *regex = [AGRegex regexWithPattern:@"\B(?<!&)#(?![\da-fA-F]{6}\b|\d{1,3}\b)[\w-_.+&#]{2,}\b" options:AGRegexCaseInsensitive];      NSArray *matches = [regex findAllInString:[message string]];      NSEnumerator *enumerator = [matches objectEnumerator];      AGRegexMatch *match = nil;      while( ( match = [enumerator nextObject] ) ) {           NSRange foundRange = [match range];           id currentLink = [message attribute:NSLinkAttributeName atIndex:foundRange.location effectiveRange:NULL];           if( ! currentLink ) [message addAttribute:NSLinkAttributeName value:[NSString stringWithFormat:@"%@://%@/%@", [[self connection] urlScheme], [[self connection] server], [match group]] range:foundRange];      } }
avatarIl n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

16

alors si je saisis tout bien à NSMutableAttributedString, ce qui est fait c'est :

* détection des #chan (au passage, #abcdef n'est pas détecté par exemple, c'est stupide) :
#airplane# -> #airplane va obtenir un attribut XHTMLStart et un attribut XHTMLEnd
-> on aurait à l'affichage : <a href="irc://irc.worldnet.net/#airplane">#airplane</a>#
mais comme il travaille pas sur du NSString mais du AttributedString, les balises font pas partie du string quand il va faire des matches. (c'est puissant cette bestiole...)

* détection des smileys il recherche dans le string du message et non le resultat (donc pas d'attributs, juste #airplane#)
-> il voit toujours #airplane# donc il va prendre les Start & End courant, et va faire du append
Donc on aurait :
XHTMLStart = <span class="emoticon airplane"><samp><a href="irc://irc.worldnet.net/#airplane">
#airplane# <-- le string matché
XHTMLEnd = </a></samp></span>

key / obj correspond par exemple :
smile = ("smile", ":-)", "happy", "=-)", "embarrassed)", ":}", ":-}", "=}", "=-}", ":]", ":-]", "=]", "=-]");
key = smile
str = chaque élément de la liste.

dans un exemple plus "concret" de plugin, on a :
{name = Happy; image = "happy.png"; insert = "grin";},
image sera utilisé pour la css, Happy, pour la class css -> key, insert -> obj


<span class="emoticon airplane">
<samp>#</samp>
</span>

est donc bien une erreur qui est dûe au MSMutableAttributedString je pense, qui voit deux découpages d'attributs :

<span ...> <samp>
<a>#airplane</a>#
</samp></span>

et :
<span ...> <samp>
#airplane#
</samp></span>


et pour trancher, il ajouterait :
</samp></span><span class="emoticon airplane"><samp>
après </a>

Si on inverse la résolution des chans, on aura toujours le même problème en fait, il va construire le span autour de #airplane#, puis va le casser pour ajouter des attributs autour de #airplane

en gros, c'est la merde...

(m'enfin je peux me tromper)
avatarIl n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi

17

Par contre pour corriger ça... faudrait effectivement inverser la résolution emoticons et des chans, et lors de la résolution des chans, si tout ou partie du mot matché contient déjà un attribut, ne rien faire. Et ça je sais pas si c'est faisable.
avatarIl n'a pas de mots
Décrire son mépris
Perdre les rênes
Il a perdu la foi