geneweb
geneweb copied to clipboard
strip leading spaces before capitalize
All entries of the type "married to" are of the form "married%t to" hence [*married%t to:::date], and a leading space necessary in the date parameter. In the case of NoEntries, the translation (for french for instance) is "%t avec", and one would wish to capitalise the date value, hence the need to strip the leading space.
Il y a deux problèmes distrincts : vouloir trim une chaine. Et vouloir capitalize le premier caractère qui n'est pas un caractère d'espacement.
Le trim automatique de la fonction "capitalize" ne me semble pas souhaitable, c'est typiquement le genre de chose qui va avoir des effets de bords non désirés.
Ajouter une fonction de trim dans l'environnement par contre, pourquoi pas. En se basant sur l'implementation présente dans les sources de OCaml (qui, je suppose est ce qu'il y a de mieux au niveau optimisation), cela donnerai pour les fonctions de trim:
let is_space = function
| ' ' | '\012' | '\n' | '\r' | '\t' -> true
| _ -> false
let trim_leading s =
let len = String.length s in
let i = ref 0 in
while !i < len && is_space (String.unsafe_get s !i) do incr i done ;
if !i = 0 then s
else if len > !i then String.sub s !i (len - !i + 1)
else ""
let trim_trailing s =
let len = String.length s in
let j = ref (len - 1) in
while !j >= 0 && is_space (String.unsafe_get s !j) do decr j done ;
if !j = len - 1
else if !j >= 0 then String.sub s 0 (!j + 1)
else ""
Code non testé et écrit à la va-vite pour donner l'idée.
À noter que Gutil.trim_trainlin_spaces devrait être remplacé par ce trim_trailing.
Ces fonctions auraient leur place dans le module Mutil qui regroupe les fonctions sans liens avec d'autres modules geneweb. Gutil étant utilisé pour les fonctions ayant un besoin de Gwdb
Pour le capitalize du coup, il conviendrait de l'adapter pour capitalize le premier caractère "visible".
ok, je refais une passe
This PR adresses the comments above, and resolves the [with] part of PR #1009