diff --git a/.gitattributes b/.gitattributes
index 948b899..62fbb9a 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -26,6 +26,10 @@ lang/paquet-facteur_en.php -text
lang/paquet-facteur_es.php -text
lang/paquet-facteur_fr.php -text
lang/paquet-facteur_sk.php -text
+lib/markdownify/LICENSE_LGPL.txt -text
+lib/markdownify/markdownify.php -text
+lib/markdownify/markdownify_extra.php -text
+lib/markdownify/parsehtml/parsehtml.php -text
/paquet.xml -text
phpmailer-php5/LICENSE -text
phpmailer-php5/README -text
diff --git a/classes/facteur.php b/classes/facteur.php
index ca3edab..c55add1 100755
--- a/classes/facteur.php
+++ b/classes/facteur.php
@@ -141,94 +141,15 @@ class Facteur extends PHPMailer {
}
/*
- * Transforme du HTML en texte brut, mais proprement, c'est-Ã -dire en essayant
- * de garder les titrages, les listes, etc
+ * Transforme du HTML en texte brut, mais proprement
+ * utilise le filtre facteur_mail_html2text
+ * @uses facteur_mail_html2text()
*
* @param string $html Le HTML Ã transformer
* @return string Retourne un texte brut formaté correctement
*/
function html2text($html){
- // On remplace tous les sauts de lignes par un espace
- $html = str_replace("\n", ' ', $html);
-
- // Supprimer tous les liens internes
- $texte = preg_replace("/\]*>(.*?)<\/a>/ims", "\\2", $html);
-
- // Supprime feuille style
- $texte = preg_replace(";;i", "", $texte);
-
- // Remplace tous les liens
- $texte = preg_replace("/\]*href=['\"](.*?)['\"][^>]*>(.*?)<\/a>/ims", "\\2 (\\1)", $texte);
-
- // Les titres
- $texte = preg_replace("; ]*>;i", "\n", $texte);
- $texte = preg_replace("; \s*)+,ims"," ",$html);
+ $html = preg_replace(",]*>;i", "\n= ", $texte);
- $texte = str_replace("
", " =\n\n", $texte);
- $texte = preg_replace(";]*>;i", "\n== ", $texte);
- $texte = str_replace("
", " ==\n\n", $texte);
- $texte = preg_replace(";]*>;i", "\n=== ", $texte);
- $texte = str_replace("
", " ===\n\n", $texte);
-
- // Une fin de liste
- $texte = preg_replace(";(u|o)l>;i", "\n\n", $texte);
-
- // Une saut de ligne *après* le paragraphe
- $texte = preg_replace(";
]*>;i", "\n", $texte);
-
- //$texte = str_replace('', "\n".'-', $texte);
- $texte = preg_replace (';
",$html);
+ $html = preg_replace(",(table)>,Uims","@@@hr@@@",$html);
+ $html = preg_replace(",?(html|body|table|td|th|tbody|thead|center|article|section|span)[^>]*>,Uims","\n\n",$html);
+ $html = preg_replace(",,Uims","\n",$html);
+ $html = preg_replace(",<(/?)(div|tr|caption)([^>]*>),Uims","<\\1p>",$html);
+ $html = preg_replace(",(
\s*
\s*
),ims","",$html); + + // succession @@@hr@@@\n\\1\n
",$html);
+
+ // vider le contenu de qqunes :
+ $html = preg_replace(",]*>.*,Uims","\n",$html);
+
+ // Liens :
+ // Nettoyage des liens des notes de bas de page
+ $html = preg_replace("@([0-9]+)@", "\\3", $html);
+ // Supprimer tous les liens internes
+ $html = preg_replace("/\]*>(.*?)<\/a>/ims","\\2", $html);
+ // Remplace tous les liens
+ preg_match_all("/\]*>(.*?)<\/a>/ims", $html,$matches,PREG_SET_ORDER);
+ $prelinks = $postlinks = array();
+ foreach ($matches as $k => $match){
+ $link = "@@@link$k@@@";
+ $url = str_replace("&","&",$matches[1]);
+ if ($match[2]==$matches[1] OR $match[2]==$url){
+ // si le texte est l'url :
+ $prelinks[$match[0]] = "$link";
+ }
+ else {
+ // texte + url
+ $prelinks[$match[0]] = $match[2] . " ($link)";
+ }
+ $postlinks[$link] = $url;
+ }
+ $html = str_replace(array_keys($prelinks), array_values($prelinks),$html);
+
+ // les images par leur alt ?
+ // au moins les puces
+ $html = preg_replace(',\s+,ims","
",$html);
+
+ #return $html;
+ include_spip("lib/markdownify/markdownify");
+ $parser = new Markdownify('inline',false,false);
+ $texte = $parser->parseString($html);
+
+ $texte = str_replace(array_keys($postlinks), array_values($postlinks),$texte);
+
+
+ // trim et sauts de ligne en trop ou pas assez
+ $texte = trim($texte);
+ $texte = str_replace("
\n","\n",$texte);
+ $texte = preg_replace(",(@@@hr@@@\s*)+\Z,ims","",$texte);
+ $texte = preg_replace(",(@@@hr@@@\s*\n)+,ims","\n\n\n".str_pad("-",75,"-")."\n\n\n",$texte);
+ $texte = preg_replace(",(\n#+\s),ims","\n\n\\1",$texte);
+ $texte = preg_replace(",(\n\s*)(\n\s*)+(\n)+,ims","\n\n\n",$texte);
+
+ // entites restantes ? (dans du code...)
+ include_spip('inc/charsets');
+ $texte = unicode2charset($texte);
+ $texte = str_replace(array(''', '"'),array("'",'"'), $texte);
+
+
+ // Faire des lignes de 75 caracteres maximum
+ return trim(wordwrap($texte));
+}
?>
diff --git a/inc/envoyer_mail.php b/inc/envoyer_mail.php
index ef29058..261c7c1 100644
--- a/inc/envoyer_mail.php
+++ b/inc/envoyer_mail.php
@@ -63,7 +63,39 @@ function inc_envoyer_mail($destinataire, $sujet, $corps, $from = "", $headers =
$message_html = $corps;
}
else {
- $message_texte = nettoyer_caracteres_mail($corps);
+ // Autodetection : tester si le mail est en HTML
+ if (strpos($headers,"Content-Type:")===false
+ AND strpos($corps,"<")!==false // eviter les tests suivants si possible
+ AND $ttrim = trim($corps)
+ AND substr($ttrim,0,1)=="<"
+ AND substr($ttrim,-1,1)==">"
+ AND stripos($ttrim,"