Skip to content

$string.diff

Description

Fusionne deux textes en y détaillant les modifications au moyen de balises <ins> et <del>.

Échappement

Du fait que la méthode utilise les balises <ins> et <del> pour signaler les différences, les caractères spéciaux de la syntaxe XML doivent être échappés. Ainsi, un caractère "<" sera converti en "<" dans la réponse.

Alternative

La méthode $xml.diff utilise un autre algorithme pour la recherche de différence. Le résultat obtenu avec cette méthode peut varier et être plus adapté selon les cas.

Syntaxe

$string.diff( old , new [ , options ] )

Paramètres

old string
Texte de base
new string
Nouveau texte à comparer avec old
options map

Map d'options. Les options reconnues sont:

rawOutput

Flag true/false indiquant si l'on souhaite obtenir la valeur brute de l'algorithme de comparaison.

Par défaut, la méthode effectue un post-traitement de la valeur générée par l'algorithme de comparaison afin de la rendre plus lisible. Ce dernier transformera par exemple la valeur:

<del>le</del><ins>un</ins> <del>petit</del><ins>nouveau</ins> <del>chat</del><ins>texte</ins>

en

<del>le petit chat</del><ins>un nouveau texte</ins>

Il est cependant possible d'obtenir la version de base en activant le flag.

L'option est désactivée (false) par défaut.

separator
Expression régulière de découpage du texte en tokens. Par défaut, le moteur utilise une expression qui découpe les textes aux espaces, signes de ponctuation et saut de lignes.

Retour

Retourne une chaîne de caractères reprenant les modifications apportées au texte.

Exemple

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
var oldText = "This is a test sentence.";
var newText = "This is a test for diffutils.";

var res = "<style>
    del {
        background-color: #f8d7da;
        text-decoration: line-through;
    }
    ins {
        background-color: #d4edda;
        text-decoration: none;
    }
</style>"::T;

res &= $string.diff(oldText, newText);
$msg.info(res, { attributes: { disableOutputEscaping: "yes" } });

Le code ci-dessus produit un message ayant la forme suivante:

This is a test sentencefor diffutils.

La documentation de la méthode $xml.diff fournit également un exemple permettant de comparer deux chaînes en s'appuyant sur une solution alternative.