Re : outil libre (fitre textuel Linux) reformattant du C++

Bernard Schoenacker <[email protected]> Wed, 1 Apr 2026 10:57:42 +0200 (CEST)
Newsgroups gmane.linux.debian.devel.french,gmane.linux.debian.user.french
Message-ID <1378848802.450656478.1775033862729.JavaMail.root@zimbra19-e3.priv.proxad.net>
Bonjour,

Si l=E2=80=99objectif est simplement de recoller les lignes physiques termi=
n=C3=A9es
par un antislash final, un filtre texte simple peut d=C3=A9j=C3=A0 faire le
travail, par exemple avec awk :

```sh
awk '{
  if (sub(/\\$/, "")) printf "%s", $0;
  else print;
}'
```

ou, en sed :

```sh
sed ':a;N;$!ba;s/\\\n//g'
```

La documentation GNU sed couvre bien le travail multi-lignes avec `N`
et les substitutions sur un espace de travail contenant des sauts de
ligne. ([GNU][1])

En revanche, j=E2=80=99aurais tendance =C3=A0 mettre un gros avertissement =
:
cela convient surtout =C3=A0 du code g=C3=A9n=C3=A9r=C3=A9 ou =C3=A0 un sou=
s-ensemble bien
ma=C3=AEtris=C3=A9. Sur du C++ arbitraire, on peut tomber sur des cas p=C3=
=A9nibles
avec cha=C3=AEnes, commentaires, directives pr=C3=A9processeur, etc.

J=E2=80=99ai regard=C3=A9 aussi du c=C3=B4t=C3=A9 d=E2=80=99un reformateur =
comme uncrustify, mais
ce que je vois dans sa configuration document=C3=A9e concerne l=E2=80=99esp=
ace
avant le `\` de continuation de ligne (`sp_before_nl_cont`), pas la
suppression de la continuation elle-m=C3=AAme. ([GitHub][2])

Donc, =C3=A0 mon avis :

* pour du code g=C3=A9n=C3=A9r=C3=A9 par carburetta : un petit filtre awk/s=
ed peut suffire ;

* pour du C++ g=C3=A9n=C3=A9ral : il faudrait un outil plus conscient de
la grammaire, ou au minimum un filtre sp=C3=A9cialis=C3=A9 avec hypoth=C3=
=A8ses
explicites.

Librement,
Bernard

[1]: https://www.gnu.org/software/sed/manual/html_node/Multiline-techniques=
.html?utm_source=3Dchatgpt.com "Multiline techniques (sed, a stream editor)=
"
[2]: https://github.com/uncrustify/uncrustify/blob/master/documentation/htd=
ocs/default.cfg?utm_source=3Dchatgpt.com "uncrustify/documentation/htdocs/d=
efault.cfg at master"





----- Basile Starynkevitch <[email protected]> a =C3=A9crit=C2=A0:
> Bonjour la liste,
>=20
> J'utilise carburetta https://carburetta.com/ comme generateur
> d'analyseur lexical et syntaxique.
>=20
> Cet outil est tr=C3=A8s pratique, libre et facilement compilable sur Debi=
an.
>=20
> Mais il requiert (=C3=A0 mon grand regret) en entr=C3=A9e un fichier avec=
 (en
> plein d'endroits) une seule ligne logique en C++ par exemple voir le
> fichier
> https://github.com/RefPerSys/RefPerSys/blob/master/carbrepl_rps.cbrt
> et plus particuli=C3=A8rement dans le commit 96d25ff0bada41 de RefPerSys=
=20
> par exemple les lignes 160 =C3=A0 169 du fichier carbrepl_rps.cbrt
>=20
> Le code C++ g=C3=A9n=C3=A9r=C3=A9 par carburetta (j'en utilise la version=
 0.8.28)
> contient les memes lignes logiques longues, par exemple=20
>=20
> #line 169 "carbrepl_rps.cbrt"
>             {  _Pragma("message \"token_action for INT\"");    \
>   (stack->sym_data_->v_.uv0_) =3D carbdata.cardata_i;            \
>   RPS_DEBUG_LOG(REPL, "token_action for INT tksrc=3D" << *tksrc  \
>                 << " cardata_i=3D" << carbdata.cardata_i);       \
>   RPS_FATALOUT("INT token_action is incomplete tksrc=3D"         \
>                << tksrc << " sym=3D" << sym                      \
>                << ":" << RPS_CARBREPL_SYMBOL_NAME(sym)         \
>                << RPS_FULL_BACKTRACE(1, "token_action INT"));  \
>  }
> #line 3484 "_carbrepl_rps.cc"
>=20
> mais les antislashs finaux en ligne physique m'indisposent, et je
> cherche un outil (filtre Linux) pour les enlever.
>=20
> Les conventions lexicales de C++ sont dans le d=C3=A9tail tr=C3=A8s compl=
exes,
> donc coder un tel filtre me parait compliqu=C3=A9
>=20
>=20
> Librement
> --=20
>=20
> Basile STARYNKEVITCH                          =20
> <[email protected]>
> 8 rue de la Fa=C3=AFencerie                     =20
> http://starynkevitch.net/Basile/ =20
> 92340 Bourg-la-Reine                       =20
> https://github.com/bstarynk
> France                              =20
> https://github.com/RefPerSys/RefPerSys
>                   https://orcid.org/0000-0003-0908-5250
>=20