La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 16:38:00


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
A lire également :
Auteur Message
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 02/04/2005 01:02:10 Sujet du message : Script pour colorer syntaxiquement du NWScript [Update][ter]

Bonjour,

Certains l'ont demandés et jusque là je n'avais jamais vraiment répondu positivement à leur demande. Ce qu'ils ont demandés? C'est simple : les sources du machin qui colorie les NWScripts, comme par exemple celui-ci :

NWScript :
// Greet any Players that come into a trigger set around a drunk in a tavern.

void main()
{
  if(GetIsPC(GetEnteringObject()))
  {
    AssignCommand(
      GetNearestObjectByTag("TavernPatron"),
      SpeakOneLinerConversation("DrunkGreeting")
    );
    AssignCommand(
      GetNearestObjectByTag("TavernPatron"),
      ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK)
    );
  }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Je trouve personnellement que cela donne plutot bien.

Le script en fonction (qui colorie les NWScripts) est disponible ici (si j'y

ATTENTION : veuillez appliquer le correctif que vous trouverez ici. C'est important si les scripts passés aux parsers le sont depuis un forum qui remplace logiquement < par &lt;, > par &gt;, " par &quit;, et & par &amp;




pense, je l'ajouterai dans les Downloads).

Il s'agit de deux fichiers php avec plusieurs choses :

nwscript.php:

nws_xhtml_parse( string )

Parse la chaîne de caractère passée en paramètre. Cette chaîne doit contenir du NWScript, et rien d'autres.
Le tout sera affiché avec un formattage XHTML de base.
Ex:

nws_xhtml_parse( file_get_contents( 'file.nss' ) );

Parse le fichier file.nss.

nws_parse( string[, mixed] )

Parse la chaîne de caractère passée en paramètre, et retourne le script coloré syntaxiquement. Le deuxième paramètre optionel doit être soit un entier, soit

une chaîne. C'est utilisé pour générer des espaces de nommage unique pour chaque parsing de NWScript. (voir plus loin: intégration dans phpbb).

nwscript.data.php:

Contient tout le matériel, et c'est pas forcément lisible. Cela veut juste dire que la taille du fichier a été compressé.

$__nws_function

Contient la liste de toutes les fonctions. C'est un tableau dont les clefs sont les noms des fonctions. Cela évite de se farcir in_array, et comme PHP

utilise un certain hashage (?), c'est plus rapide que parcourir chaque élément du tableau.

$__nws_file

Contient la liste de tous les fichiers d'inclusions de base du langage. Cela a son importance plus loin. Les clefs sont les noms des fichiers.

$__nws_keyword

Contient la liste des instructions du langage NWScript, comme if, else, ou for. Si ça vous amuse, vous pouvez ajouter de nouvelles instructions, mais bon

elles ne seront pas correctes Smile

$__nws_constant

Constantes globales, n'appartenant à aucun groupe réel. Par exemple, on a TRUE, FALSE et OBJECT_SELF.
En fait on toute les constantes de cette page du Lexicon.
Encore une fois, les clefs sont les noms des constantes.

$__nws_type

Contient les types de base du NWScript. Idem, les clefs sont les noms des types.

$__nws_constant_match

Ce drôle de tableau contient la liste des préfixes des constantes de base du NWSCript (comme ATTACK_BONUS_ONHAND).
le format est le suivant :

1ère lettre => tableau {
préfixe => longueur préfixe
}

Ex: $__nws_constant_match['W']['WEATHER'] = 7;

Les préfixes ont été récupérées à partir du Lexicon (comme tout le reste, d'ailleurs).

Note: la taille est obligatoire, car pour rechercher le préfixe j'utilise la fonction strncmp( string, string, int ).

$__nws_css_class = array();

Les différentes classes CSS utilisées, vous pouvez y toucher à 100%.

$__nws_css_class['identifier'] = 'identifier';

Les identifiants (ex: x)

$__nws_css_class['keyword'] = 'keyword';

Les mots clefs (ex: if)

$__nws_css_class['constant'] = 'constant';

Les constantes reconnues (TRUE, FALSE, etc)

$__nws_css_class['function'] = 'function';

Les fonctions reconnues.

$__nws_css_class['user-function'] = 'user-function';

Les fonctions utilisateurs.

$__nws_css_class['number'] = 'number';
$__nws_css_class['string'] = 'string';
$__nws_css_class['comment'] = 'comment';
$__nws_css_class['preprocessor'] = 'preprocessor';

Les nombres, les chaînes, les commentaires et la directive include.

$__nws_css_class['base'] = 'nwscript';

Le contenur global du NWScript coloré.

$__nws_css_class['type'] = 'type';

Classes des types.

$__nws_css_class['space'] = 'space';

Pas utilisé, sert à rien.

$__nws_css_class['error'] = 'error';

Les erreurs. (voir plus loin)

$__nws_pretty_print = true;
$__nws_pretty_print_spacer = '&nbsp; ';
$__nws_pretty_print_wrap = 30;

Si la première variable vaut vraie, alors le script va faire un affichage user-friendly. Cela veut juste dire que les tabulations, et double espaces (eg: deux espaces qui se suivent) seront remplacés par $__nws_pretty_print_spacer, et les mots de plus de $__nws_pretty_print_wrap caractères seront coupés.

Un bon exemple est l'un des scripts proposés dans le topic Vos scripts de ce forum, c'est celui de Klemth je crois, il y a un commentaire de ce genre :

NWScript :
////////////////////////////// ////////////////////////////// ///////
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Et une belle césure a été ajoutée. Sans le mode user-friendly, l'affichage est prévu pour être utilisé avec la propriété CSS white-space: pre, ou pour être placé directement dans une balise <pre />. Le mode user-friendly est conseillé pour les forums, car ça peut vraiment être cassed pied d'avoir une scrollbar horizontable.

Note: un bon script devrait toujours faire 80 caractères par ligne Smile

Pour finir, sachez que dans ce mode les sauts de lignes (\n) sont remplécés par <br />.

$__nws_pattern

Les chaînes de recherche. NE PAS Y TOUCHER. Ou alors ne venez pas vous plaindre si ça plante.
L'ordre y est important. Si ça vous amuse, vous pouvez tenter d'implémenter la directive #define.

$__nws_tok_function = 'http://www.nwnlexicon.com/compiled/function.%1$s.html';
$__nws_tok_file = 'http://www.nwnlexicon.com/compiled/include.%1$s.html';
$__nws_tok_type = 'http://nwnlexicon.com/compiled/type.%1$s.html';
$__nws_tok_constants = 'http://nwnlexicon.com/compiled/constant.%1$s.html';

Il s'agit de quatre urls menant toute quatre vers la documentation prodiguée par le Lexicon.

La première concerne les fonctions, la seconde les fichiers, la troisième les types et la quatrième les constantes (ou type de constante).

$__nws_user_function = 'p%3$s.%1$s.%2$d';

Petit truc sympa :

Le parser va essayer de vérifier s'il a affaire à une fonction lorsqu'il lit un identifiant. Par exemple : foo ( x ) (avec les espaces, ils n'importent pas dans l'analyse syntaxique/grammaticale) va faire de "foo" une fonction.

Mieux que cela : si aucun bloc n'a été ouvert, c'est à dire s'il n'y a pas d'accollades ouvrantes non fermées, il va supposer qu'il s'agit d'une déclaration de fonction et créer une ancre interne au document qui suit le format fourni par $__nws_user_function.

Ex:

Code :
printf(
$__nws_user_function,
'NomFonction', // Nom de la fonction
1, // Déclaration du prototype, ou du code de la fonction; vaut soit 1 soit 2
'xhtml' // chaîne (ou nombre) permettant de rendre unique l'identifiant à travers toute la page
// même s'il y a déjà une fonction NomFonction déclarés.
);


Produit : pxhtml.NomFonction.1

Les liens vers les fonctions à l'intérieur d'une fonction pointent toujours vers le code de la fonction, et surtout la déclaration juste avant le code de la dîte fonction. Le nom de la fonction dans la déclaration juste avant le code de la fonction renvoie sur le prototype s'il y en a un.

Ce comportement peut varier, je ne l'ai pas tester totalement.


Erreur :

Ne pas fermer les parenthèses (ou les accollades), ou alors tenter de fermer une parenthèse (ou une accollade) provoque une erreur :

NWScript :

)/* suspect parenthesis end found !*/
// je ferme, mais j'ai rien ouvert
( // j'ouvre, et je ne ferme pas
/* warning: 1 unclosed parenthesis () */
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ce message est à ignorer s'il s'agit d'un bout de script.

Dans la suite, je vais m'efforcer de vous expliquer comment appliquer du NWScript sur un forum, via un tag adéquat.
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
Dernière édition par Baldurien le 09/05/2005 18:30:39; édité 2 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 02/04/2005 01:41:10 Sujet du message :

Ajouter un tag [nwscript] à un forum phpbb2

Cela concerne bien entendu principalement les forums phpbb2, mais la méthode de base est la même ailleurs. Par contre, la méthode que j'emploie n'est pas la meilleur, et je parierai dix euros que Phpbb2 propose un truc tout fait (mais tellement mal expliqué).

Ouvrez donc le fichier bbcode.php de votre phpbb2, il se trouve dans le dossier includes.
Ouvrez aussi le fichier bbcode.tpl de votre template de base (et il faudra faire ça pour chaque template, hé oui... fallait pas en installer autant!)
Pour finir, copier les deux fichiers de l'archive directement dans le dossier includes.

Bien dans le fichier bbcode.tpl : ajoutez ceci

Code :
<!-- BEGIN nss_open --><div><b>NWScript :</b><div class="baseBBCodeCode"><!-- END nss_open -->
<!-- BEGIN nss_close --></div><span class="small">Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.</span></div><!-- END nss_close -->
<!-- BEGIN nss_close_toobig --></div><span class="small">Le code a colorer syntaxiquement est trop long (plus de NWSCRIPT_MAX_CHAR caractères) et risque de ne pas s'afficher du tout. Vous pouvez le voir en version colorée <a href="/nwinter/phpbb2/standalone.php?p={MESSAGE_ID}" target="_blank">ici</a>.</span></div><!-- END nss_close_toobig -->


Cela nous resservira (enfin, peut être pas le bloc nss_close_toobig).

Passons au fichier bbcode.php :

Cherchez la fonction prepare_bbcode_template, et puis ajoutez ceci :

Code :
$bbcode_tpl['nss_close_toobig'] = str_replace( 'NWSCRIPT_MAX_CHAR', NWSCRIPT_MAX_CHAR, $bbcode_tpl['nss_close_toobig'] );


Vous remarquerez une constante PHP (NWSCRIPT_MAX_CHAR).

Ajouter au début du fichier bbcode.php (ou avant l'utilisation de NWSCRIPT_MAX_CHAR si vous préférez) ce code là :

Code :
define( 'NWSCRIPT_MAX_CHAR', 10240 );
function nwscript_highlight( $match )
{
  global $bbcode_tpl;
   static $call = 0;

   if ( !isset( $GLOBALS['__nws_pattern'] ) )
   {
      global $__nws_function, $__nws_file, $__nws_keyword, $__nws_constant, $__nws_type;
      global $__nws_css_class, $__nws_pattern, $__nws_tok_function, $__nws_tok_file;
      global $__nws_user_function, $__nws_pretty_print, $__nws_pretty_print_spacer, $__nws_pretty_print_wrap;
      global $__nws_tok_type, $__nws_constant_match, $__nws_tok_constants;

     require_once( 'nwscript.php' );
   }

  // 2. parsing
  if ( defined( 'STANDALONE' ) || strlen( $match[1] ) <= NWSCRIPT_MAX_CHAR )
  {
    return $bbcode_tpl['nss_open'] . nws_parse($match[1], ++$call) . $bbcode_tpl['nss_close'];
  }
  else
  {
    $match[1] = str_replace( '  ', '&nbsp; ', $match[1] );
    return $bbcode_tpl['nss_open'] . $match[1] . $bbcode_tpl['nss_close_toobig_comp'];
  }
}



La fonction nwscript_highlight fera le travail nécessaire pour colorer le script, et si celui-ci dépasse les 10240 caractères, il ne sera pas coloré (pour éviter d'allourdir la page).

Enfin, cherchez la fonction :

Code :
function bbencode_second_pass($text, $uid, $message_id = -1 )


En dessous de :

Code :

// Only load the templates ONCE..
if (!defined("BBCODE_TPL_READY"))
{
  // load templates from file into array.
  $bbcode_tpl = load_bbcode_template();

  // prepare array for use in regexps.
  $bbcode_tpl = prepare_bbcode_template($bbcode_tpl);
}


Ajoutez ceci :

Code :
$bbcode_tpl['nss_close_toobig_comp'] = str_replace('{MESSAGE_ID}', $message_id, $bbcode_tpl['nss_close_toobig'] );


Et pour finir, en dessous de :
Code :

   // [code] and [/code] for posting code (HTML, PHP, C etc etc) in your posts.
   $text = bbencode_second_pass_code($text, $uid, $bbcode_tpl);


Ajouter ceci :
Code :

  $text = preg_replace_callback( '@\[nwscript\](.+)\[/nwscript\](\s*(\r\n|\n))?@Usi', 'nwscript_highlight', $text );


Problèmes à l'installation sous phpbb?

Je ne peux pas réellement vous aider car notre phpbb a été trafiqué de tout sens, et surtout je ne manipule pas toutes les fonctions phpbb (le code est déjà assez ... sale comme ça).

Algorithme du parser

Si vous sentez que c'est lent, comprenez au moins pourquoi (ce qui expliquera aussi pourquoi il ne doit pas y avoir beaucoup de "pattern").

J'utilise un algorithme qui a fait ses preuves, c'est celui de Flex. Il est entre autre employé par GCC (pour analyser le document C, le découper en mots symboliques).

En outre : les patterns (ie: éléments à rechercher) sont classés par ordre de priorité, puis si plusieurs patterns matchent la chaîne de caractère, on prend de préférence le pattern qui a analysé le plus (en gros: on prend la longueur de la chaîne trouvée). Si on a plusieurs pattern avec la même longueur, alors on prend le pattern le plus prioritaire (ie: celui dont l'index est le plus petit)

Ca c'est FLEX.

Ce que mon algorithme utilise c'est simple : ce sont des axiomes.

1. #include est prioritaire par rapport aux commentaires
2. Les commentaires multi lignes sont prioritaires par rapport aux commentaires une ligne
3. Les commentaires une ligne sont prioritaires par rapport aux chaînes
4. Les chaînes par rapport aux identifiants
5. Les identifiants permettent aussi de matcher les instructions, les types du NWScript
6. Les nombres passent après les identifiants
7. Les caractères blancs (espaces, tabulations, sauts de lignes) passent en dernier

Et si aucun de ces 7 patterns n'a réussi, on va regarder le caractère en cours.

Cela peut certainement s'améliorer (ie: je trouve " => chaîne, etc).

Voilà.
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 08/04/2005 10:51:07 Sujet du message :

Note:

La version actuelle - à cause de phpbb - remplace < par &lt;, > par &gt;, et & par &amp; !


[edit] j'ai apporté une correction, qui est la suivante :


Ouvrez: nwscript.php
Cherchez: case '&': (switch ( $string{$i} ) ), ligne #215

Remplacez:
Code :
case '&': $result .= '&amp;'; $i++; break;

Par;
Code :

            case '&':
               $i++;
               $__s__ = substr( $string, $i, 3 );
               if ( $__s__ == 'gt;' || $__s__ == 'lt;' )
               {
                  $result .= '&' . $__s__;
                  $i += 3;
                  break;
               }
               $__s__ = substr( $string, $i, 4 );
               if ( $__s__ == 'amp;'  )
               {
                  $result .= '&' . $__s__;
                  $i += 4;
                  break;
               }
               $result .= '&amp;';
            break;

Ce qui devrait résoudre le problème (le parser voyait &amp; comme un opérateur (&), un identifiant (amp), et un opérateur (Wink, là il voit &amp; comme un opérateur. (idem avec &lt; &gt;)

[edit] sans le break, ben && devenait &&&& Smile
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
Dernière édition par Baldurien le 11/04/2005 12:53:02; édité 2 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 10/04/2005 01:33:21 Sujet du message :

J'anticipe un autre problème ; si les chaînes sont mal traduite, ie:

NWScript :
""
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


donne:

NWScript :
&quot;non, ça foire :x&quot;
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


C'est que peut-être il faut corriger le pattern matchant les chaînes, pour un truc un brin plus compliqué.

Le pattern se trouve dans le fichier nwscript.data.php, et c'est celui-ci:

Code :
'@"((?:[^"]*|\\")*)"@A',


Eventuellement, il faudra le remplacer pour qu'il accepte des chaînes de la forme &quot;foo&quot; (qui - si la chaîne a été passée à coup d'htmlspecialchars - est parfaitement valide).

Le remplacer, ça implique de trouver la bonne regexp, et là bonne chance Very Happy
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 09/05/2005 18:34:03 Sujet du message :

Petite mise à jour :

Si sur votre version php vous avez le malheur (ou la stupidité) d'utiliser l'option short_open_tags ([http] il vous faudra corriger la ligne 39 du fichier :

soit vous supprimez l'entête XML (<?xml...)
soit vous remplacez <?xml par <?php print '<?xml'; ?>
soit comme nous, vous utilisez un htaccess avec php_flag short_open_tag Off
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Ailesnoires
Grand Chevalier
Inscrit le: 21 Oct 2004
Messages: 110
Localisation: Vendée
Répondre en citant
Posté le : 20/10/2005 10:40:31 Sujet du message :

J'essai d'utiliser ton fantastique systeme des bbcode nwscript mais :



Baldurien a écrit :
Petite mise à jour :

Si sur votre version php vous avez le malheur (ou la stupidité) d'utiliser l'option short_open_tags ([http] il vous faudra corriger la ligne 39 du fichier :

soit vous supprimez l'entête XML (<?xml...)
soit vous remplacez <?xml par <?php print '<?xml'; ?>
soit comme nous, vous utilisez un htaccess avec php_flag short_open_tag Off

Baldurien a écrit :
Si sur votre version php vous avez le malheur (ou la stupidité) d'utiliser l'option short_open_tags
Il semblerait que j'ai le malheur d'utiliser cette option mais je ne connais pas du tout le PHP
Serait-il possible que tu m'indiques comment faire pour modifier cela?

De plus mes scripts ne se colorient pas (il sont court) il me semble pourtant avoir bien suivie tes conseils.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 25/10/2006 16:21:18 Sujet du message :


Baldurien a écrit :
Petite mise à jour :

Si sur votre version php vous avez le malheur (ou la stupidité) d'utiliser l'option short_open_tags ([http] il vous faudra corriger la ligne 39 du fichier :

soit vous supprimez l'entête XML (<?xml...)
soit vous remplacez <?xml par <?php print '<?xml'; ?>
soit comme nous, vous utilisez un htaccess avec php_flag short_open_tag Off
J'ai certainement cette option short_open_tags, je sais pas où mais c'etait ce bug.

Par contre les deux premières methodes semblent marcher et permettent au script de fonctionner mais j'ai pas la couleur.

Pour la troisième, ça a bloqué mon forum quand j'ai créé un fichier ".htaccess", j'aurais sans doute pas dû

as tu une methode précise pour sa mise en place ? Le bug de la colorisation est-il dû à ce problème en particulier ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 26/10/2006 16:11:26 Sujet du message :

voilà la fonction nws_xhtml_parse tirée de nwnscript.php une fois retouchée avec la manip 2


Code :
 function nws_xhtml_parse( $string )
{
   global $__nws_css_class;
?>
<?php print '<?xml'; ?> version="1.0" encoding="iso8859-1" ?>
<!DOCTYPE html PUBLIC
   "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
         xml:lang="fr">
   <head>
      <title>NWScript Highligther</title>
      <meta http-equiv="Content-Type"
               content="application/xhtml+xml; charset=iso8859-1" />
      <meta http-equiv="Content-Script-Type" content="text/javascript"/>
      <meta http-equiv="Content-Style-Type" content="text/css" />
      <meta http-equiv="Content-Language" content="fr-FR" />

      <meta name="revisit-after" content="1 days" />
      <meta name="robots" content="index, follow" />
   
      <style type="text/css">
.<?php echo $__nws_css_class['base']; ?> { color: red; font: 10pt monospace; white-space: pre; }
.<?php echo $__nws_css_class['identifier']; ?> { color: black; }
.<?php echo $__nws_css_class['keyword']; ?> { color: navy; font-weight: bold; }
.<?php echo $__nws_css_class['type']; ?> { color: blue;  }
.<?php echo $__nws_css_class['constant']; ?> { color: #9AC0CD;  }
.<?php echo $__nws_css_class['function']; ?> { color: #008B8B; font-weight: bold; }
.<?php echo $__nws_css_class['user-function']; ?> { color: #008B8B; }
.<?php echo $__nws_css_class['number']; ?> { color: #808; }
.<?php echo $__nws_css_class['string']; ?> { color: gray; }
.<?php echo $__nws_css_class['comment']; ?> { color: olive; }
.<?php echo $__nws_css_class['preprocessor'], ', .', $__nws_css_class['preprocessor']; ?> a { color: #800;  }
.<?php echo $__nws_css_class['error']; ?> { background-color: #D8BFD8; color: black; }
.xhtml-info { font: 8pt verdana; text-align: center; }
      </style>
   </head>
   <body>
   <div class="xhtml-info"><b>Note: </b> il est conseillé de copier/coller la source plutôt que ce rendu
      (en particulier les espaces ne seront pas bien rendus justement!)</div>
   <hr />
<?php
$a = microtime();
echo nws_parse( $string, 'xhtml' );
$b = microtime();

$a = explode(' ', $a );
$b = explode(' ', $b );
?><hr /><div class="xhtml-info">Temps de parsing: <?php echo ((float)$b[0]+(float)$b[1]) - ((float)$a[0]+(float)$a[1]); ?> ms</div>
   </body>
</html>
<?php
   
}



cela marche partiellement car la balise fonctionne mais le texte n'est pas colorisé, quelqu'un aurait une idée de l'erreur ?

please help me Embarassed
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 26/10/2006 18:18:31 Sujet du message :

En général, il faut regarder le code XHTML produit.

Sinon, si vous avez un lexicon français... (je prévois de faire un truc du genre, si j'ai le temps)
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 26/10/2006 23:11:47 Sujet du message :

j'ai isolé le bout de code de mon test et ça donne ça :

Code :


<td colspan="2"><span class="postbody"><div><b>NWScript :</b><div class="baseBBCodeCode"><div class="nwscript"><br /><a href="http://nwnlexicon.com/compiled/type.void.html" class="type">void</a> <a href="#p1.main.2" id="p1.main.1" class="user-function">main</a>()<br />{<br /><span class="keyword">if</span> (<span class="identifier">ten</span>==<span class="number">0</span>) <span class="keyword">return</span>;<br /><br />}</div></div><span class="small">Note : le code affich&eacute; ci-dessus n'est pas rendu tel qu'il devrait l'&ecirc;tre r&eacute;ellement, en particulier des sauts de lignes sont automatiquement ins&eacute;r&eacute;s pour &eacute;viter de casser la mise en page. En le copiant/collant, vous r&eacute;soudrez ce probl&egrave;me.</span></div></span><span class="gensmall"></span></td>




pour ce code en nwscript :


NWScript :

void main()
{
if (ten==0) return;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
netcaloup
Novice
Inscrit le: 10 Mar 2006
Messages: 10
Répondre en citant
Posté le : 27/10/2006 20:18:36 Sujet du message :

le site : [http] ne semble plus exister (il ne s'affiche pas pour moi en tout cas) est ce la cause de l'erreur ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Macadam
Grand Chevalier
Inscrit le: 07 Avr 2006
Messages: 132
Répondre en citant
Posté le : 27/10/2006 23:56:13 Sujet du message :

ben non sinon ici non plus ça marcherait pas, j'y ai pensé aussi Razz
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 28/10/2006 00:23:02 Sujet du message :

Alors, je le dis une fois, une dernière fois parce que quelques monteurs de forum m'ont posé des questions sur ça ne fonctionnant pas.

C'est normal, et j'ajoute une autre partie au tutoriel :

Y a pas de couleurs, car y a pas les classes CSS nécessaires

Comme tout bon script hype de l'époque moderne, ce script crée du contenu xhtml, utilisant CSS, pour coloriser les tokens (mots clefs). Comprenez en fait que dés lors que vous avez un mot clef, tel que if, il est transformée en html :

<span class="instruction">if</span>

Cela suppose dans votre fichier CSS (subsilver.css, etc) ou dans votre fichier html (overall_header.tpl pour subsilver, etc) - au niveau de la balise <style /> - il y ait ceci :

span.instruction {color: green;}

Normalement, l'une des fonctions que je donne génère ce code là, mais pas dans phpbb car cela doit aller dans un fichier template/css qui n'est jamais analysé par php (logique):

Utilisez cette fonction pour générer le code de la balise <style />, en particulier c'est cette partie qui le fera :


Citation :
.<?php echo $__nws_css_class['base']; ?> { color: red; font: 10pt monospace; white-space: pre; }
.<?php echo $__nws_css_class['identifier']; ?> { color: black; }
.<?php echo $__nws_css_class['keyword']; ?> { color: navy; font-weight: bold; }
.<?php echo $__nws_css_class['type']; ?> { color: blue; }
.<?php echo $__nws_css_class['constant']; ?> { color: #9AC0CD; }
.<?php echo $__nws_css_class['function']; ?> { color: #008B8B; font-weight: bold; }
.<?php echo $__nws_css_class['user-function']; ?> { color: #008B8B; }
.<?php echo $__nws_css_class['number']; ?> { color: #808; }
.<?php echo $__nws_css_class['string']; ?> { color: gray; }
.<?php echo $__nws_css_class['comment']; ?> { color: olive; }
.<?php echo $__nws_css_class['preprocessor'], ', .', $__nws_css_class['preprocessor']; ?> a { color: #800; }
.<?php echo $__nws_css_class['error']; ?> { background-color: #D8BFD8; color: black; }
Ensuite, visualisez la source dans votre navigateur favori (Firefox 2.0, Opera, etc, mais pas Internet Explorer, car personne ne peut aimer ce truc), et recherchez la balise "style" (Ctrl + F : <style)

Là, vous aurez tout le code CSS à mettre dans votre template, soit dans overall_header.tpl, soit dans le fichier CSS si vous l'utilisez. <-- toute cette partie est (c) je me débrouille tout seul en me documentant sur google en fonction des templates que j'utilise, et de ce que j'ai trafiqué.
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
netcaloup
Novice
Inscrit le: 10 Mar 2006
Messages: 10
Répondre en citant
Posté le : 28/10/2006 07:10:10 Sujet du message : merci

Merci de ta réponse ! A partir du moment où je sais où chercher, je pourrais me débrouiller maintenant !
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
netcaloup
Novice
Inscrit le: 10 Mar 2006
Messages: 10
Répondre en citant
Posté le : 28/10/2006 08:11:10 Sujet du message :

Bon au niveau css c'est bon j'ai compris et ça va pas mal sauf que j'ai toujours 2 problemes :

le preminer c'est que j'ai ça :
Citation :
&quot;has_lights_effects&quot;
à la place de ça
Citation :
"has_lights_effects";
Est ce que ça correspond à ce que tu disais si dessus et dans ce cas tu avais l'air de dire que ça serait chaud à arranger ?

Mon deuxième problème c'est que certaines fonction sont considéré comme des liens et donc prennent la couleur automatique de lien


EDIT : c'est bon pour le deuxième probleme il suffit de rajouter a.type dans le css...
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 28/10/2006 13:29:15 Sujet du message :

Pour le premier, c'est du à ton phpbb. Faut ajouter la modif que j'ai donné.
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
netcaloup
Novice
Inscrit le: 10 Mar 2006
Messages: 10
Répondre en citant
Posté le : 28/10/2006 15:13:29 Sujet du message : lourd ?

Bon là tu va me trouver lourd, mais je n'ai pas vu ta modif en question...

tu dit :

Citation :

Code :
'@"((?:[^"]*|\\")*)"@A',


Eventuellement, il faudra le remplacer pour qu'il accepte des chaînes de la forme &quot;foo&quot; (qui - si la chaîne a été passée à coup d'htmlspecialchars - est parfaitement valide).

Le remplacer, ça implique de trouver la bonne regexp, et là bonne chance
mais tu ne la donne pas la solution, et si je ne me trompe pas ça n'a rien a voir avec la modif du & que tu donnais au dessus.

Je me suis donc plongé dans le regex pour éventuellement la modifier (ce que tu sous entend)

Si on enlève les @ qui enoure le regex et A l'option.
Il nous reste :

"((?:[^"]*|\\")*)"

Donc on cherche quelque chose qui commence par " et fini par " mais ce qu'il y a au milieu Sad c'est plus dur.

J'aurais dit que [^"] ce n'est pour que ce ne soit PAS "
| (OU)
\\" : ça \".....

Donc en fait tout ce qu'il y a entre les "". Hors je ne vois pas ce qui produit d'erreur dans le script...ça ça à l'air d'aller mais en fait j'ai l'impression que le probleme vient de nwnscript.php qui possède la fonction :


Citation :
ase 3: // string
$result .= '<span class="' . $__nws_css_class['string'] . '">"' . htmlspecialchars( $match[1] ) . '"</span>';

break;
Donc est ce que ce n'est pas plutôt le htmspecialchars qui transforme les " en &quot; ?
Et dans ce cas ne peut on pas remplacer les &quot; par des " par la suite....

Qu'en penses tu ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
netcaloup
Novice
Inscrit le: 10 Mar 2006
Messages: 10
Répondre en citant
Posté le : 28/10/2006 15:32:30 Sujet du message : trouvé

J'ai trouvé la solution !!!!!!!!!!!!!

J'ai corrigé ta modif :


Citation :
case '&':
$i++;
$__s__ = substr( $string, $i, 3 );
if ( $__s__ == 'gt;' || $__s__ == 'lt;' )
{
$result .= '&' . $__s__;
$i += 3;
break;
}
$__s__ = substr( $string, $i, 4 );
if ( $__s__ == 'amp;' )
{
$result .= '&' . $__s__;
$i += 4;
break;
}
$__s__ = substr( $string, $i, 5 );
if ( $__s__ == 'quot;' )
{
$result .= '&' . $__s__;
$i += 5;
break;
}
J'ai rajouté le cas où il y avait 5 lettres après & !!
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 28/10/2006 22:36:49 Sujet du message :

Sur la biblio c'est ça :

Code :
            case '&':
               $i++;
               $__s__ = substr( $string, $i, 3 );
               if ( $__s__ == 'gt;' || $__s__ == 'lt;' )
               {
                  $result .= '&' . $__s__;
                  $i += 3;
                  break;
               }
               $__s__ = substr( $string, $i, 4 );
               if ( $__s__ == 'amp;'  )
               {
                  $result .= '&' . $__s__;
                  $i += 4;
                  break;
               }
               $result .= '&amp;';
            break;

_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
netcaloup
Novice
Inscrit le: 10 Mar 2006
Messages: 10
Répondre en citant
Posté le : 29/10/2006 11:57:58 Sujet du message :

Oui mais avec ce que tu donne on a toujours le probleme des " transformé en &quot;

Alors que si on y rajoute cette partie en plus:

Citation :

$__s__ = substr( $string, $i, 5 );
if ( $__s__ == 'quot;' )
{
$result .= '&' . $__s__;
$i += 5;
break;
}
On lui indique que s'il trouve un & avec 5 lettres représentant "quot;" il permet d'afficher " au lieu de &quot; ...

En plus inutile de mettre :
Citation :
$result .= '&amp;';
à la fin alors que tu met déjà :
Citation :
if ( $__s__ == 'amp;' )
{
$result .= '&' . $__s__;
ces lignes donne déjà la valeur &amp à la variable $result.

Enfin bon, moi ça m'a résolut tout mes probleme y compris dont tu parle plus haut :


Citation :

Code :
'@"((?:[^"]*|\\")*)"@A',


Eventuellement, il faudra le remplacer pour qu'il accepte des chaînes de la forme &quot;foo&quot; (qui - si la chaîne a été passée à coup d'htmlspecialchars - est parfaitement valide).

Le remplacer, ça implique de trouver la bonne regexp, et là bonne chance
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Baldurien
L'homme qui chutait sur le macadam
Inscrit le: 12 Sep 2002
Messages: 14066
Localisation: Quadran Alpha
Répondre en citant
Posté le : 29/10/2006 13:14:22 Sujet du message :

J'ai du remplacer &quot; par ".

Ensuite, non.

En XHTML (= HTML + XML), & ne doit pas être laissé comme ça. Si tu as & dans un texte, et qu'il ne sert pas à mettre une entité, alors tu dois laisser &amp;. Là, il détecte s'il y &amp; , et évite le remplacement de & par &amp; pour former &amp;amp;
_________________
#nwnights-fr @ irc.darkmyst.org TitanQuest-FR
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
netcaloup
Novice
Inscrit le: 10 Mar 2006
Messages: 10
Répondre en citant
Posté le : 29/10/2006 14:55:44 Sujet du message :

ok j'ai remis ça :
Citation :
$result .= '&amp;';
à sa place
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 67.151ms