X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Finc_cs_liens.php;fp=www%2Fplugins%2Fauto%2Fcouteau_suisse%2Fcouteau_suisse%2Foutils%2Finc_cs_liens.php;h=73611548b1a2f58896e9c2b4a2ef73adf1f9040c;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/plugins/auto/couteau_suisse/couteau_suisse/outils/inc_cs_liens.php b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/inc_cs_liens.php new file mode 100644 index 0000000..7361154 --- /dev/null +++ b/www/plugins/auto/couteau_suisse/couteau_suisse/outils/inc_cs_liens.php @@ -0,0 +1,69 @@ +(>?)([^]]*)\],msS'); + function expanser_liens($letexte) { + $inserts = array(); + if (preg_match_all(_RACCOURCI_LIEN, $letexte, $matches, PREG_SET_ORDER)) { + $i = 0; + foreach ($matches as $regs) { + $inserts[++$i] = traiter_raccourci_lien($regs); + $letexte = str_replace($regs[0], "@@SPIP_ECHAPPE_LIEN_$i@@", $letexte); + } + } + $letexte = typo($letexte, /* echap deja fait, accelerer */ false); + foreach ($inserts as $i => $insert) + $letexte = str_replace("@@SPIP_ECHAPPE_LIEN_$i@@", $insert, $letexte); + return $letexte; + } +} + +/* + chiffres, lettres, 20 caracteres speciaux autorises dans les urls + voir les references suivantes : + http://gbiv.com/protocols/uri/rfc/rfc3986.html + http://tools.ietf.org/html/rfc3696 +*/ +@define('_cs_liens_AUTORISE', $autorises='\!\#\$\%\&\'\*\+\-\/\=\?\^\_\`\.\{\|\}\~a-zA-Z0-9'); +@define('_cs_liens_AUTORISE_FIN', $autorisesfin='\#\$\&\'\*\+\-\/\=\^\_\`\|\~a-zA-Z0-9'); +@define('_cs_liens_HTTP', ",[a-zA-Z]+://[{$autorises}:@]*[{$autorisesfin}],"); +@define('_cs_liens_WWW', ",\b(www|ftp)\.[a-zA-Z0-9_-]+\.[{$autorises}]*[{$autorisesfin}],"); +@define('_cs_liens_NEWS', ",\bnews:[{$autorises}]*[{$autorisesfin}],"); +@define('_cs_liens_MAILS', ",\b(mailto:)?([{$autorises}]*@[a-zA-Z][a-zA-Z0-9-.]*\.[a-zA-Z]+(\?[{$autorises}]*)?),"); + +// les callbacks... + +function cs_liens_echappe_callback($matches) + {return cs_code_echappement($matches[0], 'LIENS');} + +function cs_liens_raccourcis_callback($matches) { + if($GLOBALS["liens_interrogation"]) { + // TODO (SPIP>=2.1) : utiliser $lien_court = charger_fonction('lien_court', 'inc'); + $long_url = defined('_MAX_LONG_URL') ? _MAX_LONG_URL : 40; + $coupe_url = defined('_MAX_COUPE_URL') ? _MAX_COUPE_URL : 35; + if(strlen($texte = retour_interro_amp($matches[0]))>$long_url) $texte = substr($texte,0,$coupe_url).'...'; + $texte = expanser_liens('['.echappe_interro_amp($texte).'->'.echappe_interro_amp($matches[0]).']'); + } else + $texte = expanser_liens('[->'.$matches[0].']'); + return cs_code_echappement($texte, 'LIENS'); +} + +function cs_liens_email_callback($matches) { + return cs_code_echappement(expanser_liens("[$matches[2]->mailto:$matches[2]]"), 'LIENS'); +} + +// les echappements... + +function echappe_interro_amp(&$texte) { + return !$GLOBALS["liens_interrogation"]?$texte + :str_replace(array('?', '!', '&', '&', '--'), + array('++cs_INTERRO++', '++cs_EXCLAM++', '++cs_AMP++', '++cs_AMP++', '++cs_TIR++'), $texte); +} + +function retour_interro_amp(&$texte) { + return !$GLOBALS["liens_interrogation"] || strpos($texte, '++')===false?$texte + :str_replace(array('++cs_INTERRO++', '++cs_EXCLAM++', '++cs_AMP++', '++cs_TIR++'), + array('?', '!', '&', '--'), $texte); +} + +?> \ No newline at end of file