La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 16:19:31
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
A lire également : | |
Auteur | Message |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
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) ); } } 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 <, > par >, " par &quit;, et & par & 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 $__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 = ' '; $__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 :
////////////////////////////// ////////////////////////////// /////// 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 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 () */ 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 | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
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( ' ', ' ', $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 | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
Note:
La version actuelle - à cause de phpbb - remplace < par <, > par >, et & par & ! [edit] j'ai apporté une correction, qui est la suivante : Ouvrez: nwscript.php Cherchez: case '&': (switch ( $string{$i} ) ), ligne #215 Remplacez: Code : case '&': $result .= '&'; $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 .= '&'; break; Ce qui devrait résoudre le problème (le parser voyait & comme un opérateur (&), un identifiant (amp), et un opérateur (, là il voit & comme un opérateur. (idem avec < >) [edit] sans le break, ben && devenait &&&& _________________ #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 | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
J'anticipe un autre problème ; si les chaînes sont mal traduite, ie:
NWScript :
"" donne: NWScript :
"non, ça foire :x" 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 "foo" (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 _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
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 | |
Ailesnoires Grand Chevalier Messages: 110 Localisation: Vendée |
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 | |
Macadam Grand Chevalier Messages: 132 |
Baldurien a écrit : Petite mise à jour :
J'ai certainement cette option short_open_tags, je sais pas où mais c'etait ce bug.
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 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 | |
Macadam Grand Chevalier Messages: 132 |
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 |
Revenir en haut | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
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 | |
Macadam Grand Chevalier Messages: 132 |
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é 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></span><span class="gensmall"></span></td> pour ce code en nwscript : |
Revenir en haut | |
netcaloup Novice Messages: 10 |
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 | |
Macadam Grand Chevalier Messages: 132 |
ben non sinon ici non plus ça marcherait pas, j'y ai pensé aussi
|
Revenir en haut | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
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; }
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)
.<?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; } 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 | |
netcaloup Novice Messages: 10 |
Merci de ta réponse ! A partir du moment où je sais où chercher, je pourrais me débrouiller maintenant !
|
Revenir en haut | |
netcaloup Novice Messages: 10 |
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 : "has_lights_effects" à 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 | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
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 | |
netcaloup Novice Messages: 10 |
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 "foo" (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 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 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
Donc est ce que ce n'est pas plutôt le htmspecialchars qui transforme les " en " ?
$result .= '<span class="' . $__nws_css_class['string'] . '">"' . htmlspecialchars( $match[1] ) . '"</span>'; break; Et dans ce cas ne peut on pas remplacer les " par des " par la suite.... Qu'en penses tu ? |
Revenir en haut | |
netcaloup Novice Messages: 10 |
J'ai trouvé la solution !!!!!!!!!!!!!
J'ai corrigé ta modif : Citation : case '&':
J'ai rajouté le cas où il y avait 5 lettres après & !!$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; } |
Revenir en haut | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
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 .= '&'; break; _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | |
netcaloup Novice Messages: 10 |
Oui mais avec ce que tu donne on a toujours le probleme des " transformé en "
Alors que si on y rajoute cette partie en plus: Citation : $__s__ = substr( $string, $i, 5 ); if ( $__s__ == 'quot;' ) { $result .= '&' . $__s__; $i += 5; break; } En plus inutile de mettre : Citation : $result .= '&'; à la fin alors que tu met déjà : Citation : if ( $__s__ == 'amp;' )
ces lignes donne déjà la valeur & à la variable $result.
{ $result .= '&' . $__s__; 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 "foo" (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 | |
Baldurien L'homme qui chutait sur le macadam Messages: 14066 Localisation: Quadran Alpha |
J'ai du remplacer " 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 &. Là, il détecte s'il y & , et évite le remplacement de & par & pour former &amp; _________________ #nwnights-fr @ irc.darkmyst.org TitanQuest-FR |
Revenir en haut | |
netcaloup Novice Messages: 10 |
ok j'ai remis ça :
Citation : $result .= '&'; à sa place |
Revenir en haut | |
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