File size: 1,954 Bytes
6bda4a6
eebc40f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6bda4a6
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// NOTE: d3 import supprimé car non utilisé dans ce fichier

/**
 * Utilitaires pour la gestion des polices
 */

/**
 * Obtient l'ID du symbole SVG pour une police donnée
 * Utilise directement l'ID de la police + "_a" (plus besoin de mapping)
 */
export const getFontSymbolId = (fontName) => {
  if (!fontName) return 'fallback_a';
  
  // Utiliser directement l'ID de la police + "_a"
  // L'ID est déjà normalisé dans font-index.json
  return fontName.toLowerCase() + '_a';
};

/**
 * Vérifie si une police correspond à un terme de recherche
 */
export const matchesSearch = (font, searchTerm) => {
  if (!searchTerm) return true;
  const searchLower = searchTerm.toLowerCase();
  return font.name.toLowerCase().includes(searchLower) || 
         font.family.toLowerCase().includes(searchLower);
};

/**
 * Forge une URL Google Fonts pour une police donnée
 * Gère correctement les espaces, majuscules et caractères spéciaux
 */
export const generateGoogleFontsUrl = (fontName) => {
  if (!fontName) return null;
  
  // Nettoyer et formater le nom de police pour l'URL Google Fonts
  const formattedName = fontName
    .trim()
    .replace(/\s+/g, '+')  // Remplacer les espaces par des +
    .replace(/[^\w\s+]/g, '') // Supprimer les caractères spéciaux sauf +
    .replace(/\s+/g, '+'); // S'assurer que tous les espaces sont des +
  
  return `https://fonts.google.com/specimen/${formattedName}`;
};

/**
 * Filtre les polices selon les critères donnés
 */
export const filterFonts = (fonts, filter, searchTerm) => {
  return fonts.filter(font => {
    // Filtrage par famille
    const familyMatch = filter === 'all' || font.family === filter;
    
    // Filtrage par recherche
    const searchMatch = matchesSearch(font, searchTerm);
    
    return familyMatch && searchMatch;
  });
};

// NOTE: calculatePositions a été déplacé vers voronoiDilation.js
// pour éviter les doublons et centraliser la logique de dilatation