Tout d'abord, grâce à @TwanVanLaarhoven qui ont fourni une excellente réponse. J'ai cependant besoin d'une fonction qui fait l'inverse de getCharacterName
.
Ce que je voulais à l'origine était une fonction qui lirait le fichier et ne l'aurait pas codé en dur, mais j'ai finalement réalisé que cela nécessiterait des opérations d'E/S dangereuses.
Ce que j'ai décidé de faire était de copier UnicodeData.txt dans notepad ++ et utiliser les remplacements regex suivants:
écrire module UnicodeNames (characterToName,nameToCharacter) where
pâte UnicodeData.txt
remplacer: ^([\dA-F]+);([^<;>]+).*$|^([\dA-F]+);(?:[^;]*;){9}([^<;>]+).*$
avec ceci: characterToName '\\x$1$3' = "$2$4"
annexe characterToName _ = ""
pâte à nouveau
remplacer ce (nouveau): ^([\dA-F]+);([^<;>]+).*$|^([\dA-F]+);(?:[^;]*;){9}([^<;>]+).*$
avec ceci: nameToCharacter "$2$4" = Just '\\x$1$3'
append nameToCharacter _ = Nothing
remplacer ^.*<.*$
avec rien à supprimer les lignes supplémentaires. Le fichier sera incroyablement long et prendra une éternité à être compilé :-) En plus d'avoir une fonction inverse, cette méthode a l'avantage de fournir plus de noms que le paquetage unicode-names en utilisant aussi les noms unicode 1.0. Les deux fonctions dans ce fichier s'appuient sur la correspondance de modèle pour agir comme un dictionnaire de char à chaîne et vice-versa. Je mettrais ma solution sur PasteBin ou ailleurs si elle n'utilisait pas une tonne de mémoire.
Merci, c'est génial! Comment écrivez-vous la fonction inverse, cependant? (':: String -> Maybe Char') – Zaq
@Zaq Retourne chaque élément de' theList' ici: http://hackage.haskell.org/package/unicode-names-3.2.0.0/docs/src/Data-Char -Properties-NamesData.html # getCharacterName et écrire une fonction similaire (peut-être cela devrait être ajouté à la lib) –