HLevel est une librairie (GPLv3, Python3) permettant de comparer des "niveaux hiérarchiques" tels qu'ils se trouvent dans les textes où plusieurs niveaux coexistent :
A) titre de la partie
A.1) sous-partie
A.1.a) sous-sous-partie
etc.
HLevel n'a pas été testée mais est fonctionnelle : dites-moi si ce projet vous intéresse !
Typiquement, HLevel permet de dire que A.1.a est "supérieur à" (="vient après") A.1 en faisant abstraction de la parenthèse fermante.
L'idée est de stocker l'information, d'une part sous la forme d'une liste de nombres [A.1.a = (1,1,1)] pour faciliter la comparaison, d'autre part sous la forme d'une chaîne formatant la lecture et l'écriture : ".(A.IX.3)" signifie par exemple que le "." est le séparateur, que le préfixe sera ")", le suffixe étant ")".
D'autres possibilités de présentation sont possibles :
1.2.3) rien que des chiffres
A.III.i.a) lettres majuscules/chiffres romains/chiffres romains en minuscules/lettres minuscules
9.8.⑭.⁷.₆.二十二) grands chiffres/chiffres/chiffres entourés/chiffres suscrits/chiffres souscrits/japonais
Le séparateur (le point dans ces exemples), le préfixe, le suffixe sont modifiables. On peut donc lire/écrire des choses comme :
{{1/1/1}} , c'est-à-dire : séparateur = '/', préfixe = '{{', suffixe = '}}'
Pour le projet Logotheras j'avais besoin d'une gestion complète et flexible de ces niveaux hiérarchiques. J'ai donc créé une classe HLevel permettant d'écrire les choses suivantes :
# choix du séparateur '.' et du suffixe ']' :
hl1 = HLevel( src="C.IX.3]",
formatstr = ".A.I.1]" )
# remarquer l'ajout du préfixe '(' :
hl2 = HLevel( src="(C.IX.3)",
formatstr = ".(A.I.1)" )
# malgré la différence de présentation, possibilité de comparaison :
print(hl1 == hl2) # renvoie True
# affichage :
print( hl1.getRepr() ) # renvoie "C.IX.3], la chaîne de départ
print( hl2.getRepr() ) # renvoie "(C.IX.3)", la chaîne de départ
Autre exemple (HLevel dérive de la classe list) :
hl1 = HLevel( formatstr = ".①.1.a)" )
hl1.append(13)
hl1.append(2)
hl1.append(3)
# hl1 ~ 13.2.3
hl2 = HLevel( src="<<②|99|z>>",
formatstr = "|<<①|1|a>>" )
# hl2 ~ 2.99.26
print( hl1 > hl2 ) # True
print( hl1.getRepr() ) # ⑬.2.c)
print( hl2.getRepr() ) # <<②|99|z>>
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.