Fichier de Coloration WLangage v19 en PHP (GeSHi / Drupal)

MAJ 26.01.2014 :
Mise à jour pour la version 19 (finale 30e) sans les nouvelles constantes

22.12.2012 :
Mise à jour pour la version 18 (pré-finale 36f) avec les nouvelles constantes

13 Avril 2011 :
Exactement 3 ans apres la publication de la première version pour geshi, voici la version actualisée pour le WLangage v16 (38f) + Fonctions WDScript.
Pour info, je remets à jour ce fichier pour l'intégrer dans un nouveau projet GitPHP (version améliorée) afin de gérer le suivi de versions de sources wdscript.

Les chaines multilignes posent encore probleme si des mots windev y sont inclus, mais la couleur de fond reste bonne... Je trouve deja cela bien exploitable...

Toutes les fonctions WD/WB/WM 17 sont présentes, repris à zéro depuis la documentation...

GeSHi, à ma connaissance, est la seule classe assez au point en PHP pour mettre en évidence du code WLangage.
Le projet GeSHi est situé sur http://sourceforge.net/projects/geshi/ la version plus récente à ce jour est la v1.0.8.10

La plupart des forums, blogs et CMS PHP possèdent un module pour utiliser Geshi, afin d'afficher du code colorisé, et (Nouveauté) lier les fonctions à la documentation, comme je l'ai fait ici, via lien hypertexte..

Il n'est pas compliqué d'ajouter de nouvelles fonctions, les liens fonctionnent par catégorie et peuvent être utilisées pour des fonctions perso.... comme les fonctions wdscript.

Le fichier de définition de la syntaxe windev.php est fourni dans l'archive (en bas de la page).

PROCEDURE Demo(LOCAL _param est entier)
 
oScheme est un cTxt
oScheme:sSeparatorX="="
oScheme:nFixedColumns=2
oScheme:bIgnoreLignesVides=Vrai
oScheme:Parse(fChargeTexte("X:\WDScript\Editplus scheme\wdscript.stx"))
 
sKey, sListe sont chaînes
nListe est entier
oScheme:Premier()
TANTQUE PAS oScheme:EnDehors
        SI oScheme:colof(1)[[A 4]]=";---" OU (nListe>0 ET oScheme:ColOf(1)[[A 2]]=";#") ALORS
                nListe++
                {"Liste"+nListe,indChamp}..Libellé=oScheme:colof(1)[[6 A]]
        SINON SI nListe > 0 ET nListe <= 14 ALORS
                sKey=SansEspace(oScheme:ColOf(1))
                
                SI sKey[[1]]=";" ALORS
                        sKey=sKey[[2 A]]
                FIN
                
                SI PAS sKey[[1]] DANS (" ","#") ALORS
                        ListeAjoute("Liste"+nListe,sKey) 
                        SI sKey[[1]]="*" ALORS
                                ListeSelectPlus("Liste"+nListe,ListeOccurrence("Liste"+nListe))
                        FIN
                FIN
        FIN
        oScheme:Suivant()
FIN
 
Ascenseur1..BorneMax=nListe
 
// Tests avancés :
oMachin est un objet WDSCRIPT dynamique
tMachin est un tableau fixe sur 4 entiers
 
sML est chaîne=[
<b>code html</b><img />
]
SI Vrai ALORS
        sML2 est chaîne = [
        <b>code entier [crochets]</b><img />
        <b>code entier [crochets]</b><img />
        <b>code entier [crochets]</b><img />
        ]
FIN
sML  = [
<b>code réél fonction </b><img />
<b>code html Trace() </b><img />
 
<b>code Pile [crochets]</b><img />
%1 %2 %3
]
sML = [

        <b>code entier</b>La c'est
        <b>test function</b><input type='text' value='compliqué'>
                                                 ]
 
sML = sML +RC+...
"Ca devient bon"+...
"dur dur les expressions régulières avec l'utf 8"
 
tab est un tableau d'entiers sans signe sur 8 octets
 
struct_listing est une structure
        id est entier
        fullpath est chaîne    
        file     est chaîne
 
        sNomFR  est chaîne
        sNomEN  est chaîne
        
        bFunction est boolean
FIN
tbListing est un tableau de struct_listing
 
SI fFichierExiste(ComplèteRep(fRepExe())+"functions.xml") ALORS
        Désérialise(tbListing,fChargeTexte(ComplèteRep(fRepExe())+"functions.xml"),psdXML)
FIN
TableAffiche(TA_FICHIERS,taDébut)
 
// Test Windev 18
sKey = ExtraitLigne(sListe, 1)
zipCrée("zip", "C:\Temp\Archive.zip", zipUnicode)

Pour le module drupal, il faut ajouter un petit patch pour différencier le vert (variables) du noir (mots clés)

Dans le fichier /sites/all/modules/geshifilter/geshifilter.pages.inc ajoutez les lignes 5 et 6 (if $lang...) :

  ...
  _geshifilter_override_geshi_defaults($geshi, $lang);
 
  //Patch pour modifier les couleurs par défaut selon le type de "code"
  if ($lang=="windev") $geshi->set_overall_style('color:green;');
  if ($lang=="shell") $geshi->set_overall_style('color:silver; background-color:black;');
 
  // some more GeSHi settings and parsing
  if ($inline_mode) {
    // inline source code mode
    $geshi->set_header_type(GESHI_HEADER_NONE); 
    ...

et dans le fichier geshi.php pour gérer les accents :

Pour les versions > 1.0.8.0 (vers ligne 3390 en 1.0.8.4, l.3497 en 1.0.8.10) :

        // Highlight methods and fields in objects
        if ($this->lexic_permissions['METHODS'] && $this->language_data['OOLANG']) {
            $oolang_spaces = "[\s]*";
            $oolang_before = "";
//          $oolang_after = "[a-zA-Z][a-zA-Z0-9_]*";
            $accents=utf8_encode("éèàâî");
            $oolang_after = "[a-zA-Z][[:alnum:]éèàâî_$accents]*"; //Patch pour les attributs avec Accents ..Libellé par exemple
            ...

Pour les versions <= 1.0.7.22 (la modification concerne la ligne en commentaire), attention le fichier geshi.php doit être en UTF8 :

         //
        // Highlight methods and fields in objects 
        //
        if ($this->lexic_permissions['METHODS'] && $this->language_data['OOLANG']) {
            foreach ($this->language_data['OBJECT_SPLITTERS'] as $key => $splitter) {
                if (false !== stristr($stuff_to_parse, $splitter)) {
                    if (!$this->use_classes) {
                        $attributes = ' style="' . $this->language_data['STYLES']['METHODS'][$key] . '"';
                    }
                    else {
                        $attributes = ' class="me' . $key . '"';
                    }
                    $stuff_to_parse = preg_replace("/(" . preg_quote($this->language_data['OBJECT_SPLITTERS'][$key], 1) . "[\s]*)([a-zA-Z\*\(][a-zA-Zéèàâî0-9_\*]*)/", "\\1<|$attributes>\\2|>", $stuff_to_parse);
                    //$stuff_to_parse = preg_replace("/(" . preg_quote($this->language_data['OBJECT_SPLITTERS'][$key], 1) . "[\s]*)([a-zA-Z\*\(][a-zA-Z0-9_\*]*)/", "\\1<|$attributes>\\2|>", $stuff_to_parse);
                }
            }
        }

Fichier attachéTailleDownloadsLast Download
Geshi.windev.scheme.v0.3.10-wd10062.zip (Maj le 10/12/2008)24.08 Ko4185il y a 4 jours 4 min
Geshi.windev.scheme.v2.1.0.15-wd15046.zip (Maj le 11/02/2010)686.57 Ko4244il y a 4 jours 4 min
Geshi.windev.scheme.v2.2.0.15-wd15061.zip (Maj le 17/05/2010)687.66 Ko4278il y a 1 semaine 3 jours
Geshi.windev.scheme-wd16038.zip (Maj le 13/04/2011)691.93 Ko3451il y a 1 semaine 3 jours
Geshi.windev.scheme-wd17061.zip698 Ko1253il y a 4 jours 4 min
Geshi.windev.scheme-wd18036.zip (Maj le 22/12/2012)697.22 Ko1162il y a 4 jours 4 min
Geshi.windev.scheme-wd19030.2.zip (Maj le 31/01/2014)694.92 Ko966il y a 4 jours 21h

Commentaires

Options d'affichage des commentaires

Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder les paramètres" pour activer vos changements.

Bonjour Tout d'abord un grand

Bonjour

Tout d'abord un grand merci pour ce projet.

J'essaye de l'utiliser sur un site en joomla. J'ai mis les bons fichiers aux bons endroits et j'ai le geshi 1.0.8.10 installé. Tout semble fonctionner sauf un truc : quand j'essaye le code de test de votre page, il semble y avoir un problème avec les < et ça fout tout le reste en l'air. Avez-vous une idée d'où ça pourrait venir ?

Merci d'avance pour votre réponse

Bonjour Concernant mon

Bonjour
Concernant mon problème d'affichage du code WD dans Joomla, c'est en fait un problème d'éditeur.
TinyMCE livré avec la version 1.7x fonctionne mal avec Geshi et votre patch. Ceci même après avoir fait la MAJ vers la dernière version.
En utilisant FCKEditor, le test proposé fonctionne parfaitement. Encore merci pour cela.
Je vous transmettrai, dès la sortie de mon site, son adresse évidemment mais aussi comment j'ai installé ça sous Joomla pour compléter votre tuto.
Bien à vous

:) content d'avoir enfin des

:) content d'avoir enfin des commentaires qui ne sont pas du spam, les commentaires contenant une url sont automatiquement mis en attente pour cela...

Bien, à vrai dire, les balises > et < sont souvent mal interprétées dans les moteurs de site comme joomla et drupal, et ceux-ci (et surtout joomla) changent tres souvent, il est donc difficile de donner une réponse exacte au problème.

Personnellement, je n'ai pas eu le problème sous drupal. J'ai fait quelques sites sous Joomla est le problème peut etre à plusieurs niveaux... Je penche pour un problème du coté du plugin Joomla, car Geshi semble supporter ça correctement...

Sinon il y a une nouvelle version majeure de geshi en préparation, mais je ne la conseille pas du tout personnelement :p (testée sur differentes "appli" php)