Surligneur en C++

Voir le sujet précédent Voir le sujet suivant Aller en bas

Surligneur en C++

Message  vidalv le Lun 20 Avr - 11:35

Bonjour et bravo pour le travail accomplis.

J'ai deux questions concernant le surligneur et la syntaxe C++.

1) Lors de l'utilisation de barre oblique inverse (backslash) dans certaines conditions
le surlignement ne fonctionne plus correctement, par exemple :
-> printf("le carré du produit est %f\n",varloc); fonctionne bien alors que
-> printf("\nle carré du produit est %f\n",varloc); surligne en rouge tout depuis le \
Est-ce normal ? ou je fait mal qq chose ...

2) Tous les nombres sont en rouge sauf le zero s'il est tout seul ou au début d'un nombre,
1.0987 sera en rouge alors que
0.010203 sera en noir et rouge
( J'ai fait le test en basic est ça marche bien dans tous les cas, quelle est l'astuce ?)

Merci et bon courage, cet éditeur demande à être plus largement connu encore Bravo !

vidalv

Messages : 4
Date d'inscription : 20/04/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Surligneur en C++

Message  Admin le Mar 21 Avr - 1:48

Bonsoir,

Merci pour vos encouragements.
Pour répondre à votre première question, c'est un comportement normal du surligneur C++ fourni. Pour y remédier, vous pouvez modifier via GBEPad le fichier c++.sur qui se trouve (par défaut) dans le sous répertoire "surligneurs" du répertoire où vous avez installé GBEPad.
Une fois ce fichier ouvert, positionner vous sur la ligne 41. Vous devriez être sur la ligne :
<Range Name="Strings &quot;..&quot;" Style="">

Repérez entre cette ligne et la ligne </Range> les lignes comprisent entre les tags <SubRules> et </SubRules>. Remplacez ces lignes par la ligne <SubRules/>.

Enregistrer le fichier et ouvrez un source C++ dans GBEPad. Vous ne devriez plus rencontrer le problème.

Pour le deuxième point, il faut que je vérifie plus en détails...

Cordialement,
Grégory.

Admin
Admin

Messages : 76
Date d'inscription : 25/10/2007

Voir le profil de l'utilisateur http://gbepad.forumpro.fr

Revenir en haut Aller en bas

Re: Surligneur en C++

Message  vidalv le Mar 21 Avr - 11:00

Merci Gregory,

quel est ce langage ? j'essaie de comprendre le raisonnement mais sans la syntaxe c'est pas évident.
Lorsque vous dites de remplacer les lignes entre <SubRules> et </SubRules> par <SubRules/> ça veux
dire de les mettre en commentaire ou de les enlever ? A ce moment la j'ai soit un message d'erreur lors
de l'ouverture du fichier C++ soit aucun changement.

Le bout de code :

<SubRules>
<Range Name="Continue" Style="">
<Attributes Foreground="clRed" Background="clNone" ParentBackground="True"/>
<Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[]^`{|}~"/>
<OpenToken FinishOnEol="True" StartLine="" PartOfTerm="Right"/>
<CloseToken StartLine="" PartOfTerm="False"/>
<Properties CloseOnEol="True"/>
<MultiTokens>
<Tokens Open="\"/>
</MultiTokens>
<SubRules/>
</Range>
<KeyList Name="Escape" Enabled="True" Style="" Words="\&quot;
\\
">
<Attributes Foreground="$000071E1" Background="clNone" ParentForeground="false" ParentBackground="True"/>
</KeyList>
</SubRules>

Il y a un backslash entre <MultiTokens> et </MultiTokens> est-ce le bon ?

Merci.
Rolling Eyes

vidalv

Messages : 4
Date d'inscription : 20/04/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Surligneur en C++

Message  Admin le Mar 21 Avr - 22:01

Bonsoir,

Les surligneurs syntaxiques sont des fichiers textes classiques s'apparentant à des fichiers xml.
Sélectionnez tout le code suivant, copiez le et collez le tout dans un nouveau fichier texte nommé c++.sur. Placez ensuite ce fichier dans le sous répertoire "surligneur" de GBEPad.

Code:
<?xml version="1.0" encoding="windows-1251"?>
<SynUniHighlighter Version="2.0">
   <SyntaxColoring>
      <Info>
         <General Name="C++" Extensions="C CPP H HPP CXX PC" Version="1" Revision="0" Sample="#include &lt;stdio.h&gt;

int main(int argc, char* argv[])
{
  printf(&quot;Hello world!\n&quot;);
  return 0;
}" History=""/>
      </Info>
      <Schemes/>
      <Editor/>
      <MainRules Name="SyntaxColoring" CaseSensitive="True" Style="">
         <Attributes Foreground="clBlack" Background="clNone" ParentBackground="True"/>
         <Delimiters Value="!&quot;%&amp;'()*+,-./:;&lt;=&gt;?@[\]^{|}~"/>
         <SubRules>
            <Range Name="Remarks //" Style="">
               <Attributes Foreground="clGreen" Background="clNone" ParentBackground="True"/>
               <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
               <OpenToken StartLine="" PartOfTerm="Right"/>
               <CloseToken StartLine="" PartOfTerm="False"/>
               <Properties CloseOnEol="True"/>
               <MultiTokens>
                  <Tokens Open="//"/>
               </MultiTokens>
               <SubRules/>
            </Range>
            <Range Name="Remarks /*..*/" Style="">
               <Attributes Foreground="clGreen" Background="clNone" ParentBackground="True"/>
               <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
               <OpenToken StartLine="" PartOfTerm="Right"/>
               <CloseToken StartLine="" PartOfTerm="Right"/>
               <Properties/>
               <MultiTokens>
                  <Tokens Open="/*" Close="*/"/>
               </MultiTokens>
               <SubRules/>
            </Range>
            <Range Name="Strings &quot;..&quot;" Style="">
               <Attributes Foreground="clPurple" Background="clNone" ParentBackground="True"/>
               <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[]^`{|}~"/>
               <OpenToken StartLine="" PartOfTerm="Right"/>
               <CloseToken StartLine="" PartOfTerm="Right"/>
               <Properties CloseOnEol="True"/>
               <MultiTokens>
                  <Tokens Open="&quot;" Close="&quot;"/>
               </MultiTokens>
               <SubRules/>
            </Range>
            <Range Name="Chars '..'" Style="">
               <Attributes Foreground="clRed" Background="clNone" ParentBackground="True"/>
               <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
               <OpenToken StartLine="" PartOfTerm="Right"/>
               <CloseToken StartLine="" PartOfTerm="Right"/>
               <Properties CloseOnEol="True"/>
               <MultiTokens>
                  <Tokens Open="'" Close="'"/>
               </MultiTokens>
               <SubRules/>
            </Range>
            <Range Name="Hex number" Style="">
               <Attributes Foreground="clMaroon" Background="clNone" ParentBackground="True"/>
               <Delimiters Value="!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^`{|}~"/>
               <OpenToken StartLine="" PartOfTerm="Right"/>
               <CloseToken StartLine="" PartOfTerm="False"/>
               <Properties CloseOnTerm="True"/>
               <MultiTokens>
                  <Tokens Open="0x"/>
               </MultiTokens>
               <SubRules/>
            </Range>
            <KeyList Name="Keywords 1" Enabled="True" Style="" Words="bool
char
class
const
case
catch
const_cast
double
default
do
delete
dynamic_cast
else
enum
explicit
export
extern
for
false
float
friend
if
inline
int
long
mutable
new
namespace
operator
protected
private
public
reinterpret_cast
return
short
signed
sizeof
static
struct
static_cast
switch
template
throw
true
typedef
typename
this
try
typeid
union
unsigned
using
virtual
void
volatile
wchar_t
while
">
               <Attributes Foreground="clBlue" Background="clNone" ParentBackground="True"/>
            </KeyList>
            <KeyList Name="Keywords 2" Enabled="True" Style="" Words="asm
auto
break
continue
goto
register
">
               <Attributes Foreground="clBlue" Background="clNone" ParentBackground="True"/>
            </KeyList>
            <KeyList Name="Hash directives" Enabled="True" Style="" Words="#define
#error
#include
#elif
#if
#line
#else
#ifdef
#pragma
#endif
#ifndef
#undef
">
               <Attributes Foreground="clNavy" Background="clNone" ParentBackground="True"/>
            </KeyList>
            <KeyList Name="Operators" Enabled="True" Style="" Words="+
-
=
/
%
&amp;
&gt;
&lt;
^
!
|
*
^
:
">
               <Attributes Foreground="clBlack" Background="clNone" ParentBackground="True"/>
            </KeyList>
            <KeyList Name="Punctuators" Enabled="True" Style="" Words="{
}
;
(
)
,
[
]
.
">
               <Attributes Foreground="clBlack" Background="clNone" ParentBackground="True"/>
            </KeyList>
            <Set Name="Illegal characters" Enabled="True" Style="" Symbols="#@¨¸ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ" Quantity="0">
               <Attributes Foreground="clRed" Background="clNone" ParentBackground="True"/>
            </Set>
            <Set Name="Numbers" Enabled="True" Style="" Symbols="0123456789" Quantity="0">
               <Attributes Foreground="clRed" Background="clNone" ParentBackground="True"/>
            </Set>
            <Set Name="Floats" Enabled="True" Style="" Symbols=".0123456789" Quantity="0">
               <Attributes Foreground="clRed" Background="clNone" ParentBackground="True"/>
            </Set>
         </SubRules>
      </MainRules>
   </SyntaxColoring>
   <CodeFolding>
      <FoldRegion Name="{}" Type="0">
         <OpenToken Symbol="{"/>
         <CloseToken Symbol="}"/>
         <Properties AddEnding="True"/>
         <SubRegions/>
      </FoldRegion>
      <FoldRegion Name="Remarks /*..*/" Type="1">
         <OpenToken Symbol="/*"/>
         <CloseToken Symbol="*/"/>
         <Properties/>
         <SubRegions/>
      </FoldRegion>
      <FoldRegion Name="#ifdef" Type="1">
         <OpenToken Symbol="#IFDEF"/>
         <CloseToken Symbol="#ENDIF"/>
         <Properties/>
         <SubRegions/>
      </FoldRegion>
   </CodeFolding>
</SynUniHighlighter>

Ce surligneur syntaxique devrait corriger vos problèmes.
Je n'ai pas sous la main d'exemple en C complexes. Indiquez moi si cela répond à vos besoins.

Cordialement,
Grégory.

Admin
Admin

Messages : 76
Date d'inscription : 25/10/2007

Voir le profil de l'utilisateur http://gbepad.forumpro.fr

Revenir en haut Aller en bas

Re: Surligneur en C++

Message  vidalv le Mer 22 Avr - 12:08

Bonjour,

J'ai fait la manip et c'est Ok, le problème est corrigé, lorsque vous dites que les fichiers surligneurs s'apparentent au xml ou
puis-je trouver une doc m'indiquant la syntaxe : Info, Schemes, Editor, Attributes etc ... afin d'ajuster ces fichiers à mes besoins.

J'ai une autre petite remarque, le mode de sélection en colonne et directement lié au positionement en fin de ligne, càd, si le mode de positionnement au dela de la fin de ligne n'est pas autorisé, la selection en colonne ne peut être supperieur à la fin de ligne de la dernière ligne sélectionnée, c'est contournable en autorisant le positionnement mais un peu contraignant. Je sais ma question à l'air alambiqué ... Essayez sur un des fichier .sur, faites une sélection avec la souris sur une zone, vous verrez qu'en mode non autorisé la sélection est restreinte.

Si je peux me permettre aussi une petite amélioration possible de l'éditeur, lors de l'édition d'un fichier structuré C++, VB etc, serai-t-il possible d'avoir une barre récapitulative des fonctions (Déclaration) afin d'accéder directement à celle-ci en la sélectionnant avec la souris ? Si vous éditez, par exemple, un fichier en Visual Basic sous excel (Alt+F11) cette barre existe en haut à droite (Déclarations). Je trouve cela bien pratique pour sauter de déclarations en déclarations.

Encore merci pour votre aide.

Cordialement.

Vincent.

vidalv

Messages : 4
Date d'inscription : 20/04/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Surligneur en C++

Message  Admin le Mer 22 Avr - 21:55

Bonsoir,

Je n'ai pas d'aide toute prête à vous fournir pour expliquer la syntaxe. Je travaille actuellement sur un outil permettant de faire ses propres surligneurs. Il faudrait que je documente mais cela prend du temps...

J'ai compris votre remarque sur la sélection en colonne. Vous avez trouvé vous même la solution en cochant l'option "Autoriser le positionnement après la fin de ligne". Votre demande pourrait elle se résumé à activer cette option automatiquement lorsque la sélection en mode colonne est activée ?

Enfin, bonne nouvelle, concernant votre dernière remarque, cela est possible dans GBEPad. C'est ce que j'ai appelé "Liste des fonctions" (CTRL+L par défaut). Dans la boite de dialogue de configuration, vous pouvez configurer l'expression régulière qui sera utilisée par la fonction "Liste des fonctions". Par défaut GBEPad est configuré pour certains langages tels que le C++ et VB.
Ouvrez un fichier C++ et faites CTRL+L. La liste des fonctions s'affiche et vous pouvez cliquer dans cette liste pour se positionner sur la ligne correspondante dans le source. Dans la version actuelle de GBEPad, vous devrez faire CTRL+L pour rafraichir la liste des fonctions : en effet, la mise à jour n'est pas automatique lorsque le source est modifié.

Cordialement,
Grégory

Admin
Admin

Messages : 76
Date d'inscription : 25/10/2007

Voir le profil de l'utilisateur http://gbepad.forumpro.fr

Revenir en haut Aller en bas

Re: Surligneur en C++

Message  vidalv le Jeu 23 Avr - 10:47

Bonjour,

Je vois que vous aviez anticipé le sujet donc j'attendrai que l'outil soit disponible pour générer les fichiers .sur, en attendant
je fait les modifications à partir d'un fichier existant et en suite je fait des essais.

Je pense en effet que l'activation automatique serai un plus, mais c'est vous le concepteur. (Avec Ultraedit c'est automatique).

Pour la liste des fonctions c'est en effet cela, sauf que la aussi j'aurai besoin de connaitre la syntaxe pour adapter à mes besoins,
pour le C++ nous avons : ^[A-Za-z]+([\s]*)[A-Za-z]+[A-Za-z0-9_:]*\([^)]*\)
pour le pascal : ^\s*(procedure|function|constructor|destructor)
pour le VB : Rien ???, je vais chercher par moi même.
Je pense qu'un menu déroulant serai plus judicieux, ça prend que momentanément de la place sur l'édition en cours et en sélectionnant avec la souris la liste pourrai être remise à jour automatiquement, à vous de voir si c'est mieux ou pas.

Encore une remarque, si on ouvre GBEPad avec l'affichage de l'explorateur de fichiers activé, il est vide, il faut dé-valider et re-valider pour avoir l'arborescence, est-ce un bug ?

Cordialement.

Vincent.

vidalv

Messages : 4
Date d'inscription : 20/04/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Surligneur en C++

Message  Admin le Sam 25 Avr - 1:31

Bonsoir,

La fonctionnalité "Liste des fonctions" n'est pas disponible par défaut avec GBEPad. Je croyais l'avoir fait mais ce n'est pas le cas.
Voici l'expression régulière à renseigner dans le boite de dialogue de configuration de GBEPad (rubrique Liste des fonctions puis sélectionnez le langage Visual Basic) :
Code:
^(private|public)?([\s]*)(function|sub)([\s]*)[A-Za-z]+[A-Za-z0-9_.]*\([^)]*\)

Concernant le bug sur le mini explorateur de fichiers, je n'arrive pas à le reproduire (j'utilise une version de GBEPad plus récente et encore enn cours de développement...).

Grégory.

Admin
Admin

Messages : 76
Date d'inscription : 25/10/2007

Voir le profil de l'utilisateur http://gbepad.forumpro.fr

Revenir en haut Aller en bas

Re: Surligneur en C++

Message  Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum