Il semble y avoir un bug dans le package listings en cas d'utilisation de linerange conjointement avec certains types de commentaires.

Comment peut-on faire un rapport de bug ?

Description du problème :

Objectif : pour traiter un langage comme PHP, on souhaite

  • définir des commentaires multilignes /* ... */

  • utiliser linerange pour n'imprimer que la partie entre les balises <? et ?>

Problème rencontré : le listing ne s'arrête pas à la balise ?> si un commentaire multilignes est défini et présent dans le code.

NB : le pb existe avec le langage PHP prédéfini par listings, mais j'ai réduit le problème à 2 mini définitions de langages.

    \documentclass{article}
    \usepackage{listings}
    \usepackage{color}

\lstdefinelanguage{mylanguageA}%
    {   
        comment=[l]//,%
    }[comments]

\lstdefinelanguage{mylanguageB}%
    {   
        comment=[l]//,%
        morecomment=[s]{/*}{*/},%
    }[comments]%

\lstset{commentstyle=\color{blue}, frame=single}
    \begin{document}

% Language A
    % Correctly stops at ?>
    % but /* ... */ is not defined as comment
    \begin{lstlisting}[
        language=mylanguageA,
        linerange={<?}-{?>},includerangemarker=false,
    ]
    <?
      /* 
       * bla
       */
      function f(){ 
      }
    ?>
    etc
    \end{lstlisting}

% Language B
    % ERROR : This listing doesn't stop at  ?>
    \begin{lstlisting}[
        language=mylanguageB,
        linerange={<?}-{?>},includerangemarker=false,
    ]
    <?
      /* 
       * bla
       */
      function f(){ 
      }
    ?>
    etc
    \end{lstlisting}

% Language B
    % But correctly stops at ?> if the comment /* */ is a single line
    \begin{lstlisting}[
        language=mylanguageB,
        linerange={<?}-{?>},includerangemarker=false,
    ]
    <?
      /* bla */
      function f(){ 
      }
    ?>
    etc
    \end{lstlisting}
    \end{document}

Posée 13 Nov '23, 11:28

BrB's gravatar image

BrB
213
Taux d'acceptation : 0%

Modifiée 17 Nov '23, 17:03

Bienvenue sur TeXnique.fr !

(13 Nov '23, 16:07) denis ♦♦ denis's gravatar image

Les formules de politesse et les signatures sont à éviter : celle(s) de votre contribution a (ont) été supprimée(s).

(13 Nov '23, 16:07) denis ♦♦ denis's gravatar image
1

Ça me semble être un bug que vous pouvez signaler au mainteneur du package listings dont le nom et le courriel figurent en première page de la documentation.

(13 Nov '23, 16:13) denis ♦♦ denis's gravatar image

OK merci. Je me demandais s'il y avait un outil de reporting, mais je vais envoyer un mail dans ce cas.

(13 Nov '23, 16:19) BrB BrB's gravatar image

En remplaçant etc par du contenu (utilisant <?, ?> et des commentaire multilignes ou non) dans votre ECM, tout semble se passer comme il faut. Pourriez-vous remplacer etc par un ou des exemples qui ne fonctionnent pas?

(17 Nov '23, 15:21) Paul Gaborit Paul%20Gaborit's gravatar image

Le code fourni ne s'affichait pas correctement dans le message, à cause des <, Je l'ai mis à jour.

(17 Nov '23, 17:06) BrB BrB's gravatar image

Là, c'est plus clair. Merci. Le bug ne semble se manifester que lorsque un commentaire /*...*/ débute juste après la marque <?.

(18 Nov '23, 00:03) Paul Gaborit Paul%20Gaborit's gravatar image
Affichage de 5 parmi 7 Afficher 2 commentaire(s) en plus
Soyez le premier à répondre à cette question !
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.