| 62,6 → 62,8 |
| // Note: utiliser \\b plutôt que \\W pour matcher les bordures de mots |
| // en incluant début et fin de ligne |
| var regexp_complete = null; |
| |
| var regexp_context = null; |
| var regexp_thin = null; |
| |
| // nombre maximum de passages de la détection sur un node donné |
| 79,6 → 81,41 |
| ']|^){1,24}'; |
| |
| |
| function supprimerAccents(str) { |
| var rExps=[ |
| {re:/[\xC0-\xC6]/g, ch:'A'}, |
| {re:/[\xE0-\xE6]/g, ch:'a'}, |
| {re:/[\xC8-\xCB]/g, ch:'E'}, |
| {re:/[\xE8-\xEB]/g, ch:'e'}, |
| {re:/[\xCC-\xCF]/g, ch:'I'}, |
| {re:/[\xEC-\xEF]/g, ch:'i'}, |
| {re:/[\xD2-\xD6]/g, ch:'O'}, |
| {re:/[\xF2-\xF6]/g, ch:'o'}, |
| {re:/[\xD9-\xDC]/g, ch:'U'}, |
| {re:/[\xF9-\xFC]/g, ch:'u'}, |
| {re:/[\xD1]/g, ch:'N'}, |
| {re:/[\xF1]/g, ch:'n'} ]; |
| for(var i=0, len=rExps.length; i<len; i++) |
| str=str.replace(rExps[i].re, rExps[i].ch); |
| return str; |
| }; |
| |
| // c'est moche mais le mauvais support de l'unicode dans |
| // javascript ne me permet pas de faire mieux |
| function etendreChaineAccents(str) { |
| return str.replace('a',"(a|à|á|â|ã|ä|å)") |
| .replace('e',"(e|è|é|ê|ë)") |
| .replace('i',"(i|ì|í|î|ï)") |
| .replace('o',"(o|ò|ó|ô|õ|ö)") |
| .replace('u',"(u|ù|ú|û|ü)") |
| .replace('y',"(ýÿ)") |
| .replace('a',"(a|à|á|â|ã|ä|å)") |
| .replace('æ',"(ae|æ)") |
| .replace('ç',"(ç|c)") |
| .replace('ñ',"(ñ|n)") |
| .replace('œ',"(œ|oe)"); |
| } |
| |
| function afficherLienDefinitions() { |
| html = '<div id="conteneur_activation_definition"><a href="#">rechercher les définitions</a></div>'; |
| $('#conteneur_activation_definition').live('click', function(event) { |
| 94,6 → 131,12 |
| $('body').append(html); |
| } |
| |
| function normaliserMotPourRecherche(str) { |
| str = supprimerAccents(str); |
| str = etendreChaineAccents(str); |
| return str; |
| } |
| |
| $.fn.remplacerDefinitions = function(mots) { |
| this.each(function() { |
| $(this).contents().filter(function() { |
| 138,12 → 181,18 |
| // regexp d'extraction du contexte, sans limite aux bords de "mot", |
| // peu amener des faux positifs, et notamment ne pas matcher au mieux. |
| // Eg: subsessiles match "sessile" et non "subsessile". |
| while( (matches_c = regexp_thin.exec(texte)) ) liste.push(matches_c); |
| while( (matches_c = regexp_thin.exec(texte)) ) { |
| //liste.push(getUnique(clean(matches_c))); |
| liste.push(matches_c); |
| } |
| |
| if(liste.length == 0) return [null]; |
| |
| // regexp de validation des bordure de mots, ne conserve que des matches correct |
| // vis-à-vis de la bordure gauche |
| while( (matches_c = regexp_complete.exec(texte)) ) liste_complete.push(matches_c[1]); |
| while( (matches_c = regexp_complete.exec(texte)) ) { |
| liste_complete.push(matches_c[1]); |
| } |
| |
| // si une match n'est pas dans le tableau des mots autorisés (indexOf) |
| for(var i = 0; i < liste.length; i++) { |
| 153,6 → 202,7 |
| return [liste, liste_complete] |
| } |
| |
| |
| function getMotsADefinitions() { |
| $.ajax({ |
| url: URL_BASE_SERVICE+'mots/', // provient de dictionnaire.config.js |
| 160,6 → 210,7 |
| motsAyantDefinition = data; |
| batirRegexp(motsAyantDefinition); |
| $(set).remplacerDefinitions(motsAyantDefinition); |
| |
| }, |
| dataType: "JSON", |
| global: false |
| 230,8 → 281,7 |
| afficherPopupDefinition(); |
| }, |
| dataType: "JSON", |
| global: false, |
| async: false |
| global: false |
| }); |
| } |
| |