#1 

15-08-2009 18:48:39

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Bein c'est cool, ça nous aura pris a peu près une semaine. et maintenant on peut se reposer smile
N'hésitez pas à critiquer si quelque chose vous déplait, ou si il manque une fonctionnalité.

Voici les éléments colorés:
Les mots réservés du c++. les commentaires. Les directives de préprocesseur. Les opérateurs. Les chiffres. Les textes entre guillemets simples. Les textes entre guillemets doubles.

  • Le texte.


Récapitulatif du code:
/include/parser.php

ligne 2
  require PUN_ROOT.'include/coloration_syntaxique.php';

ligne 120
 // Look for regular code and quote tags
$c_start = strpos($text, '[Code=cpp.]');    //mod
$c_end = strpos($text, '[/Code.]');           //mod
$c_start = strpos($text, '[code.]');
$c_end = strpos($text, '[/code.]');

ligne 300
       function do_bbcode($text)
{
 $text=preg_replace_callback("#\\[Code=cpp\\](.+)\\[/Code\\]#isU","cpp",$text);        //mod


/include/coloration_syntaxique.php
    
<?php    
if (!defined('PUN'))exit;
function pregoperateurs(){      return array( '#(\\!)#is',     '#(\\|)#is',     '#(\\%)#is',     '#(\\&amp;)#is', '#(\\')#is',     '#(\\()#is',     '#(\\))#is',     '#(\\+)#is',     '#(\\,)#is',     '#(\\-)#is',     '#(\\.)#is',     '#(\\/)#is',     '#(\\;)#is',     '#(\\=)#is',     '#(\\@)#is',       '#(\\[)#is',     '#(\\])#is',     '#(\\{)#is',     '#(\\})#is',     '#(\\^)#is',     '#(\\:)#is',     '#(\\~)#is',     '#(\\")#is',     '#(\\<)#is',     '#(\\>)#is' ,    '#(\\&lt;)#is',  '#(\\&gt;)#is',  '#(\\*)#is',     '#(\\?)#is',     '#(0)#is',      '#(1)#is',      '#(2)#is',   '#(3)#is',    '#(4)#is',    '#(5)#is',    '#(6)#is',    '#(7)#is',    '#(8)#is',    '#(9)#is',    '#(\\&quot;)#is', '#( )#is');}                                                                          
function pregcryptogrammes(){   return array( '#(§¤¤¤¤¤§)#is','#(§¤¤¤¤£§)#is','#(§¤¤¤££§)#is','#(§¤¤£¤¤§)#is','#(§¤¤£¤£§)#is','#(§¤¤££¤§)#is','#(§¤¤£££§)#is','#(§¤£¤¤¤§)#is','#(§¤£¤¤£§)#is','#(§¤£¤£¤§)#is','#(§¤£¤££§)#is','#(§¤££¤¤§)#is','#(§¤££¤£§)#is','#(§¤£££¤§)#is','#(§¤££££§)#is','#(§£¤¤¤¤§)#is','#(§£¤¤¤£§)#is','#(§£¤¤£¤§)#is','#(§£¤¤££§)#is','#(§£¤£¤¤§)#is','#(§£¤£¤£§)#is','#(§£¤££¤§)#is','#(§£¤£££§)#is','#(§££¤¤£§)#is','#(§££¤£¤§)#is','#(§££¤££§)#is','#(§£££¤¤§)#is','#(§£££¤£§)#is','#(§££££¤§)#is','#(§£££££§)#is','#(§£££§)#is','#(§¤¤§)#is','#(§££¤§)#is','#(§£¤£§)#is','#(§£¤¤§)#is','#(§¤££§)#is','#(§¤£¤§)#is','#(§¤¤£§)#is','#(§¤¤¤§)#is','#(§¤£¤§)#is',   '#(§)#is');}   
function operateurs(){          return array( '!',            '|',            '%',            '&amp;',        '\\'',           '(',            ')',            '+',            ',',            '-',            '.',            '/',            ';',            '=',            '@',               '[',            ']',            '{',            '}',            '^',            ':',            '~',            '"',            '<',            '>' ,           '&lt;',         '&gt;',         '*',            '?',            '0',              '1',            '2',         '3',           '4',             '5',           '6',             '7',           '8',          '9',           '&quot;',        ' '      );}                                                                        
function cryptogrammes(){       return array( '§¤¤¤¤¤§',      '§¤¤¤¤£§',      '§¤¤¤££§',      '§¤¤£¤¤§',      '§¤¤£¤£§',      '§¤¤££¤§',      '§¤¤£££§',      '§¤£¤¤¤§',      '§¤£¤¤£§',      '§¤£¤£¤§',      '§¤£¤££§',      '§¤££¤¤§',      '§¤££¤£§',      '§¤£££¤§',      '§¤££££§',      '§£¤¤¤¤§',      '§£¤¤¤£§',      '§£¤¤£¤§',      '§£¤¤££§',      '§£¤£¤¤§',      '§£¤£¤£§',      '§£¤££¤§',      '§£¤£££§',      '§££¤¤£§',      '§££¤£¤§' ,     '§££¤££§',      '§£££¤¤§',      '§£££¤£§',      '§££££¤§',      '§£££££§',      '§£££§',        '§¤¤§',     '§££¤§',       '§£¤£§',         '§£¤¤§',       '§¤££§',         '§¤£¤§',       '§¤¤£§',      '§¤¤¤§',       '§¤£¤§',         '§'      );}              
function hide($matches){        return preg_replace(pregoperateurs(),cryptogrammes(),$matches[0]);}
function hide2($matches){       return $matches[1].preg_replace(pregoperateurs(),cryptogrammes(),$matches[2]).$matches[3];}
function hide3($matches){       return '§£¤§'.preg_replace(pregoperateurs(),cryptogrammes(),$matches[2]).'§£¤§';}
function dev($matches){         return preg_replace(pregcryptogrammes(),operateurs(),$matches[0]);}
function cpp($matches){    
    $matches[1]=preg_replace_callback('#(//|// )(.+)(\
)#isU',"hide",$matches[1]);                                                                                           //cacher    commentaires //
    $matches[1]=preg_replace_callback('#(/\\*|/\\* )(.*)(\\*/)#isU',"hide",$matches[1]);                                                                                        //cacher    commentaires /*
    $matches[1]=preg_replace_callback('#(\
*)(.+)(\\\\\\ *\
)#',"hide",$matches[1]);                                                                                            //cacher directives         \\                        
    $matches[1]=preg_replace_callback('#(\\\\\\ *\
)(.+)(; *\
|} *\
|\\) *\
)#',"hide",$matches[1]);                                                                                    //cacher directives
    $matches[1]=preg_replace_callback('#(\\#include|\\#ifndef|\\#define|\\#if|\\#else|\\#elif)(.*)(\
)#isU','hide',$matches[1]);                                                          //cacher directives inline
    $matches[1]=preg_replace_callback('#(?<!div class=)(\\&quot;)(.*)(\\&quot;)#isU',"hide3", $matches[1]);                                                                    //cacher guillemets doubles
   	$matches[1]=preg_replace_callback('#(?<!div class=)(\\')(.*)(\\')#isU',"hide2", $matches[1]);                                                                              //cacher guillemets simples    
    $matches[1]=preg_replace('#(?<!&quot)(?<!&lt)(?<!&gt)(?<!&amp)(;|\\,|\\(|\\)|\\{|\\}|\\[|\\]|\\+|\\-|\\=|^|\\:|\\&lt;|\\&gt;|\\&amp;|\\*|/|!|%|@|\\.|\\^|\\~|\\?)#isU','<span class="operateurs">$1</span>', $matches[1]);        //colorer operateurs    
    $matches[1]=preg_replace('#([^a-zA-Z0-9§£¤_\\#])(for|while|if|else|switch|case|break|default|return|printf|struct|class|public|private|new|delete|asm|auto|catch|const|continue|do|enum|extern|explicit|exit|friend|goto|inline|protected|register|signed|sizeof|static|this|try|typedef|using|virtual|volatile|printf)([^a-zA-Z0-9§£¤=_])#isU','$1<span class="mots_cles">$2</span>$3', $matches[1]);
    $matches[1]=preg_replace('#([^a-zA-Z0-9§£¤_])(namespace|true|false|void|int|char|double|float|unsigned|signed|bool|long)([^a-zA-Z0-9_])#isU','$1<span class="mots_cles">$2</span>$3', $matches[1]);                                     //colorer mots cles    
    $matches[1]=preg_replace('#( |\\(|\\=|\\*|\\.|,|\\+\\-\\/|<|>|\\[)([0-9]++)(?![a-eg-zA-EG-Z])#isU','$1<span class="chiffres">$2</span>', $matches[1]);                           //colorer chiffres    
    $matches[1]=preg_replace('#(?<!div class=)(\\')(.*)(\\')#isU','<span class="guillemetsimple">$1$2$3</span>', $matches[1]);                                                 //colorer guillemets simples    
    $matches[1]=preg_replace('#(§£¤§)(.*)(§£¤§)#isU','&quot;$2&quot;', $matches[1]);   
    $matches[1]=preg_replace('#(?<!div class=)(\\&quot;)(.*)(\\&quot;)#isU','<span class="guillemetdouble">$1$2$3</span>', $matches[1]);                                       //colorer guillemets doubles
    $matches[1]=preg_replace(pregcryptogrammes(),operateurs(), $matches[1]);                                                                                                 //dévoiler tout le monde    
    $matches[1]=preg_replace('#(\\#include|\\#ifndef|\\#define|\\#if|\\#else|\\#elif)(.*)(\
)#isU','<span class="directives">$1$2$3</span>',$matches[1]);                                 //colorer directives inline    
    $matches[1]=preg_replace('#(\\#endif)#isU','<span class="directives">$1</span>',$matches[1]);                                                                             //colorer directives inline    
    $matches[1]=preg_replace('#(\\\\\\)( *\
)(.+)(;|}|\\))( *\
)#isU','$1$2<span class="directives">$3$4</span>$5', $matches[1]);                                                   //colorer directives
    $matches[1]=preg_replace('#(/\\*|/\\* )(.*)(\\*/)#isU','<span class="commentaires">$1$2$3</span>', $matches[1]);                                                            //colorer commentaires  /*    
    $matches[1]=preg_replace('#(?<!http:)(//)(?!http://)(.*)(\
)#isU','<span class="commentaires">$1$2</span>$3', $matches[1]);                                              //colorer commentaires  //        
 return '<div class="codebox" ><div class="incqbox"><h4>Code c++ :</h4><div class="texte" style="font-family:monospace; FONT-SIZE: 1.1em">'.$matches[1].'</div></div></div>';}                                               //encadrer le code
?>


/style/imports/Mercury_cs.css
[quote].mots_cles{color:3288cb;}
.commentaires{color 898989;}
.directives{color:44a444;}
.operateurs{color:e16644;}
.guillemetsimple{color:898989;}
.guillemetdouble{color:898989;}
.chiffres{color:ccaa77;}
.texte{color:}

[/quote]
Test de coloration:

Code c++ :


#define TEST()   printf("Coloration Syntaxique"); 

//exemple
int main(int argc, char *argv[])
{
    TEST()

    return 0;
}


Hors ligne


#2 

15-08-2009 19:45:46

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 92.130.139.144
Courriel

En tous les cas merci pour tous ces codes. wink


Force et sagesse...

Hors ligne


#3 

15-08-2009 20:43:23

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 90.5.171.13
Courriel  Site web

perso je metrait les syntaxe des mot clée et operateur de la même couleur que les texte du skin ( Mercury -> orange | cpp -> mot clée -> orange ) smile

ça bug avec les processeur :

Code c++ :

#if defined WIN32 || defined WIN64 || defined _WIN32_ || defined _WIN64_
    #define WINDOWS
#endif


et pour une question de simplicité ne serais t-il pas plus judicieux d'écrire "code=cpp" au lien de "Code=cpp" pour les modification des poste ses plus simple il aurais alors la même balise de fermeture (si sa pose pas de problème)

Hors ligne


#4 

16-08-2009 10:07:15

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Merci tmike.
Merci également Magun, effectivement j'ai oublié cette eventualité, d'ailleurs j'ai du en oublier d'autre, car je ne connais pas toutes les façon d'écrire en c++.
Concernant les balises tu as entierement raison, il serait plus pratique d'écrire en minuscule. Mais le probleme c'est que, la balise [/code.] est déja utilisé par punbb, et je n'ai pas trouvé de solution pour évité les conflits engendrés.
Pour ce qui est de la couleur orange, malheuresement c'est la seule couleur qu'on ne peut pas choisir puisqu'elle est réservé pour les liens.

Voilà une nouvelle maj pour corriger pas moins de 5 bugs yikes
Les codes de Magun mon grandement aidé à désceler de nombreux bugs et à découvrir de nouvelles mises en formes. smile


Hors ligne


#5 

16-08-2009 15:18:09

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.64.158
Courriel

Update effectuée.


Force et sagesse...

Hors ligne


#6 

16-08-2009 15:42:35

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.64.158
Courriel

Update effectuée wink


Force et sagesse...

Hors ligne


#7 

17-08-2009 16:47:09

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 81.51.159.49
Courriel

Mise à jour effectuée.

Pour ce qui est du premier post, tu ne pourras pas car tu n'en es pas l'auteur. Par contre effectivement, tu modifie juste le dernier en date,
avec un message notifiant que tu as effectué une mise à jour.


Force et sagesse...

Hors ligne


#8 

17-08-2009 21:18:55

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 86.218.247.190
Courriel

nico Ecris:

Ok, ça te dérange pas si j'efface tous les codes bugés ? à la place je met "code obsolète" ou alors je supprime carrement les post. ?
Que préfères-tu ?

Non pas de soucis, je ne suis pas sur que tu puisse supprimer un de tes post, mais la première option est bonne. Sinon, je supprimerais plus tard
les post marqué 'obselète'. wink


Force et sagesse...

Hors ligne


#9 

18-08-2009 17:08:42

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.148.139
Courriel

wink


Force et sagesse...

Hors ligne


#10 

20-08-2009 07:10:31

Metallizer
Membres
Avatar de Metallizer
Date d'inscription:
Messages: 100
IP: 80.14.49.68
Courriel  Site web

Moi aussi j'ai une critique big_smile
Ça devrait utiliser une font à largeur fixe non ? un petit "monospace" dans font-family ? wink


Hors ligne


#11 

20-08-2009 11:12:37

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Salut Metallizer , merci pour ta critique.

Ça devrait utiliser une font à largeur fixe non ?

Je ne me suis jamais posé la question, et je n'ai pas conscience des désagréments engendrés , peux-tu nous dire quel est l'inconveneant du style de police actuel ?
Et donc quels sont les avantages des polices monospace ? merci.


Hors ligne


#12 

26-08-2009 08:41:47

Metallizer
Membres
Avatar de Metallizer
Date d'inscription:
Messages: 100
IP: 80.14.49.68
Courriel  Site web

Pour expliquer, voici un petit exemple. J'ai créé une petite classe Exemple où j'ai souhaité aligner les méthodes pour qu'on distingue bien le type de retour et le nom de chaque méthode. J'ai copié mon code directement sans le modifier.

Avec une police à largeur variable :

Code c++ :

class Exemple {
  public:
                    Exemple();
                    ~Exemple();
    void            setName(const core::stringc& newName);
    core::stringc   getName();
};


Avec une police à largeur fixe :

class Exemple {
  public:
                    Exemple();
                    ~Exemple();
    void            setName(const core::stringc& newName);
    core::stringc   getName();
};

D'ailleurs, la balise code de base de votre forum exploite une police "monospace"...


Hors ligne


#13 

26-08-2009 10:46:34

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Effectivement c'est beaucoup plus agréable en Monospace, j'ai mis a jour le code et je te remerci pour ta remarque. big_smile
Si tu as 5 min tmyke wink il faudrait mettre a jour coloration_syntaxique.php. Merci


Hors ligne


#14 

28-08-2009 09:05:43

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 86.204.49.141
Courriel

Voilà qui est fait.


Force et sagesse...

Hors ligne


#15 

28-08-2009 09:24:26

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 188.93.45.30
Courriel  Site web

il reste un bug avec les preprocesseur :

Code c++ :


#if defined SDL_SUPPORT
#elif defined IRRLICHT_SUPPORT
#endif


pourquoi ne pas colorier tout les lignes contenants ou commençant par '#' ?

Hors ligne


#16 

28-08-2009 14:51:41

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Merci Magun, je connaissait pas elif cool

Magun Ecris:

pourquoi ne pas colorier tout les lignes contenants ou commençant par '#' ?

Exellente remarque, en fait cela vient juste de moi, j'essai de colorer en fonction des éléments connus lorsque j'en ai la possibilité.
Cela permet de desceller plus aisément les fautes de frappes dans les posts. mais le problème, comme tu peut le constater, est qu'il peut y avoir des oublis.

Bon désolé tmyke, encore une maj à éffectuer wink


Hors ligne


#17 

28-08-2009 18:44:46

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 188.93.45.30
Courriel  Site web

ok je voie un peut ton systeme maintenant wink

il rest encore ça :

Code c++ :


#define function(x, y)(( ((x*y)^y-x)/100*x\\
                               cos((x+y)/2)+tan(y))\\
                               +y*(y*x)-x)


si la ligne presedant a \\ et si il y a \\ apres le define c'est la suite de celui-ci
mais sur se coup la ses peut-etre plus embêtant ^-^

Hors ligne


#18 

28-08-2009 19:17:20

nico
Administrateurs
Avatar de nico
Date d'inscription:
Messages: 563
IP: 82.232.128.163
Courriel

Oui, les directives sur plusieurs lignes, c'est le truc qui m'a le plus fait galérer, et visiblement c'est pas encore ça sad
je vais voir ça. Merci encore

edit:Correction effectué.


Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
163 invités en ligne
membre en ligne: -
RSS Feed