sansaccent

Crates.iosansaccent
lib.rssansaccent
version0.1.0
created_at2025-08-24 07:08:45.202424+00
updated_at2025-08-24 07:08:45.202424+00
descriptionConvertit les chaînes françaises en slugs URL-friendly en supprimant accents et caractères spéciaux
homepagehttps://github.com/xulien/sansaccent
repositoryhttps://github.com/xulien/sansaccent
max_upload_size
id1808137
size35,412
julien brunet (xulien)

documentation

https://docs.rs/sansaccent

README

sansaccent

Petit utilitaire pour la normalisation de texte français en URLs conviviales (slugs).

Description

sansaccent est un utilitaire spécialement conçu pour le français qui normalise l'accentuation et les caractères spéciaux, en remplaçant les espaces par des tirets. Cette bibliothèque est particulièrement utile pour :

  • Générer des URLs SEO-friendly à partir de titres français
  • Créer des identifiants de fichiers sans caractères problématiques
  • Normaliser des chaînes de caractères pour des systèmes qui ne supportent pas les accents

Fonctionnalités

Suppression des accents et caractères diacritiques
Conversion en minuscules
Gestion des ligatures françaises (œ → oe, æ → ae)
Remplacement des caractères spéciaux sémantiques (€ → euro, & → et, @ → at, % → pourcent)
Normalisation des espaces multiples
Suppression des guillemets typographiquesSupport Unicode complet
Trait Slugify pour &str, String et Cow<'_, str>
Intégration Serde optionnelle (feature serde) pour sérialiser/désérialiser des slugs

Installation

Ajoutez sansaccent à votre Cargo.toml :

[dependencies]
sansaccent = "1.0.0"

Ou utilisez cargo pour l'installer :

cargo add sansaccent

Activer l'intégration Serde (optionnelle):

[dependencies]
sansaccent = { version = "1.0.0", features = ["serde"] }

Usage

Exemple basique

use sansaccent::slugify;

fn main() {
    println!("{}", slugify("Café de l'été")); 
    // Affiche: "cafe-de-l-ete"
    
    println!("{}", slugify("Un cœur en hiver")); 
    // Affiche: "un-coeur-en-hiver"
    
    println!("{}", slugify("L'æther & l'€uro")); 
    // Affiche: "l-aether-et-l-euro-uro"
}

Exemple avec le trait Slugify

use sansaccent::Slugify;

fn main() {
    let s = String::from("Café de l'été");
    println!("{}", s.slugify()); // "cafe-de-l-ete"
}

Exemple avec Serde (feature serde)

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct Post {
    // Le slug sera normalisé à la sérialisation et à la désérialisation
    #[serde(with = "sansaccent::serde")]
    slug: String,
}

Cas d'usage avancés

use sansaccent::slugify;

// Texte avec caractères spéciaux
assert_eq!(slugify("Prix: 10€"), "prix-10-euro");
assert_eq!(slugify("Tom & Jerry"), "tom-et-jerry");
assert_eq!(slugify("contact@example.com"), "contact-at-example-com");
assert_eq!(slugify("50% de réduction"), "50-pourcent-de-reduction");

// Guillemets et caractères typographiques
assert_eq!(slugify("«guillemets français»"), "guillemets-francais");
assert_eq!(slugify("'apostrophes'"), "apostrophes");

// Gestion des espaces multiples
assert_eq!(slugify("trop   d'espaces     entre les mots"), "trop-d-espaces-entre-les-mots");

// Suppression des séparateurs en début/fin
assert_eq!(slugify("--test--"), "test");
assert_eq!(slugify("   test   "), "test");

API

slugify(input: &str) -> String

Convertit une chaîne de caractères en slug URL-friendly.

Paramètres :

  • input: &str - La chaîne à convertir

Retour :

  • String - La chaîne normalisée

Exemple :

let result = slugify("Un très beau café ☕");
assert_eq!(result, "un-tres-beau-cafe");

Tests

Pour exécuter la suite de tests complète :

cargo test

Pour exécuter les tests avec sortie détaillée :

cargo test -- --nocapture

Pour exécuter un test spécifique :

cargo test test_ligatures

Couverture des tests

La bibliothèque inclut plus de 19 tests couvrant :

  • ✅ Fonctionnalité de base
  • ✅ Gestion des accents et emphasis
  • ✅ Normalisation des espaces
  • ✅ Ligatures françaises (œ, æ)
  • ✅ Caractères spéciaux sémantiques
  • ✅ Guillemets typographiques
  • ✅ Cas limites (chaînes vides, espaces uniquement)
  • ✅ Caractères Unicode et emojis
  • ✅ Performance avec de longues chaînes
  • ✅ Exemples de documentation

Licence

MIT OR Apache-2.0

Contribution

Les contributions sont les bienvenues ! N'hésitez pas à :

  1. Fork le projet
  2. Créer une branche pour votre fonctionnalité (git checkout -b feature/AmazingFeature)
  3. Commit vos changements (git commit -m 'Add some AmazingFeature')
  4. Push vers la branche (git push origin feature/AmazingFeature)
  5. Ouvrir une Pull Request

Support

Pour signaler un bug ou demander une fonctionnalité, veuillez ouvrir une issue sur le dépôt du projet.

Commit count: 1

cargo fmt