geneweb icon indicating copy to clipboard operation
geneweb copied to clipboard

strip leading spaces before capitalize

Open hgouraud opened this issue 5 years ago • 4 comments

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.

hgouraud avatar Aug 20 '20 07:08 hgouraud

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

sagotch avatar Aug 31 '20 10:08 sagotch

Pour le capitalize du coup, il conviendrait de l'adapter pour capitalize le premier caractère "visible".

sagotch avatar Aug 31 '20 10:08 sagotch

ok, je refais une passe

hgouraud avatar Aug 31 '20 11:08 hgouraud

This PR adresses the comments above, and resolves the [with] part of PR #1009

hgouraud avatar Aug 31 '20 18:08 hgouraud