Journal HLevel, librairie pour comparer B.IX.2 < A.IV.3.a < A.III.2.c

Posté par (page perso) . Licence CC by-sa
11
14
oct.
2013

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 à ceux qui les ont postés. Nous n'en sommes pas responsables.