HandCoder : extension Nvu pour Tidy et PHP
Modérateur : chinon37
Pour tidy justement ce serait pas mieux de mettre l'option --drop-empty-paras no , par defaut ? C'est pas que j'en ai besoin, mais ca me parait plus logique.
Rudy
Soutenir KompoZer
- Pour avoir la fenêtre 'Accepter / Annuler les modifications', après une modification dans l'editeur externe, il faut que le document modifié soit dans l'onglet actif. Sinon il se passe rien dans nvu, si on est passé a un autre onglet.
- Apres avoir eu la fenetre 'Accepter / Annuler les modifications', tu attends un certain temps, puis tu cliques sur accepter, ca provoque un crash de nvu. Evidement ca me l'a fait 3 fois et depuis plus rien ! Grrr ! Ah si ca me le refait, bon on va dire que c'est aleatoire.
Rudy
Soutenir KompoZer
Oui, et c'est le plus gros reproche que je fasse à HandCoder actuellement.Do-IT a écrit :Pour avoir la fenêtre 'Accepter / Annuler les modifications', après une modification dans l'editeur externe, il faut que le document modifié soit dans l'onglet actif. Sinon il se passe rien dans nvu, si on est passé a un autre onglet.
Le corollaire, c'est qu'on ne peut pas garder SciTE et Nvu ouverts sur le même document. SciTE gère très bien les modifications apportées par Nvu sur le fichier (on peut même le configurer pour l'auto-reload), l'inverse est encore loin d'être vrai.
J'y travaille activement. Pour mon usage personnel, je voudrais pouvoir garder une fenêtre de Nvu + une fenêtre de SciTE, chacune ouverte sur plusieurs fichiers (onglets), et modifier mes pages web indifféremment depuis SciTE ou Nvu. Je dois être tordu...
Il y a quelques situations où on arrive très bien à faire crasher Nvu, parfois avec un taux de réussite de 100%. J'en avais rapporté quelques-unes, mais n'ayant jamais eu ni de réponse, ni de "merci", ni de correction (évidemment), je me suis lassé de les recenser.Do-IT a écrit :Apres avoir eu la fenetre 'Accepter / Annuler les modifications', tu attends un certain temps, puis tu cliques sur accepter, ca provoque un crash de nvu. Evidement ca me l'a fait 3 fois et depuis plus rien ! Grrr ! Ah si ca me le refait, bon on va dire que c'est aleatoire.
Parmi ces situations "à risque", j'en ai repéré une autre (difficile à reproduire), avec NsmConText : dans la fenêtre d'édition, clic droit sur une image ou un lien, aller dans le menu "Ouvrir l'image/le lien avec...", attendre, et cliquer dans la fenêtre => crash.
La situation que tu me décris ressemble fortement à celle-ci.
Malheureusement je n'ai pas moyen d'intervenir directement sur ce bug, que j'attribue à la gestion événementielle de Nvu. Je trouverai peut-être une façon de contourner ce bug.
Peut-être, mais pas sûr. En utilisant un éditeur WYSIWYG, l'utilisateur lambda a tôt fait d'avoir tout un tas de balises <p /> et <span /> vides, juste parce qu'il a sélectionné par erreur un style dans le menu déroulant.Do-IT a écrit :Pour tidy justement ce serait pas mieux de mettre l'option --drop-empty-paras no , par defaut ? C'est pas que j'en ai besoin, mais ca me parait plus logique.
Les options de Tidy sont très nombreuses, je voudrais ne garder "par défaut" que celles qui sont vraiment importantes, afin d'éviter de noyer les utilisateurs dans une soupe d'arguments...
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
J'ai effectivement perdu 400 lignes de code php. (Vive les sauvegardes)
En voilà un beau. J'ai essayé de simplifier au maximum un exemple. J'utilise beaucoup die(); dans mes tests de securité.
Apparement la multiplication des </body></html> posent problemes.
Code : Tout sélectionner
<?php
$grosbug=true;
?><!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" lang="fr-fr">
<head><meta content="text/html; charset=ISO-8859-15" http-equiv="content-type" />
<title>test</title>
</head>
<body>
<p>1</p>
<?php
if (!$grosbug) {
print "<p>2</p></body></html>";
die();
}
if (!$grosbug) {
print "<p>3</p></body></html>";
die();
}
?>
<p>4</p>
</body>
</html>
- il y a un retour a la ligne apres le 1er </html>
- le fichier est tronqué apres le 2eme </body>
Sans le php avant le doctype, aucun soucis. (Dans cet exemple le code php avant le doctype c'est pour forcer l'ouverture via l'extension)
Rudy
Soutenir KompoZer
C'est les mauvaises habitudes qu'on prend avec DW. Je le fais aussi (travailler avec plusieurs documents a la fois, simultanement sur le code et le wysiwyg).Kaze a écrit :J'y travaille activement. Pour mon usage personnel, je voudrais pouvoir garder une fenêtre de Nvu + une fenêtre de SciTE, chacune ouverte sur plusieurs fichiers (onglets), et modifier mes pages web indifféremment depuis SciTE ou Nvu. Je dois être tordu...
Tu n'arrives pas a detecter la modification d'un fichier qui est dans un onglet inactif ou c'est l'actualisation qui pose probleme ?
2 idées ? :
- Forcer la fermeture du fichier avant d'ouvrir l'editeur externe ? Puis on le reouvre manuellement ?
ou
- lorsque nvu devient actif (en 1er plan), fermer et réouvrir les fichiers plus recents ? Ou les fichiers ouverts via la fonction Editeur.
Soutenir KompoZer
N'exagérons rien ! Mais c'est vrai que je suis fautif dans la mesure où je ne poste pas tous les bugs que je trouve...Do-IT a écrit :Grrr, chaque fois que je te trouve un bug tu le connais déjà !
Très joli bug, effectivement.Do-IT a écrit :J'ai effectivement perdu 400 lignes de code php. (Vive les sauvegardes)
En voilà un beau. J'ai essayé de simplifier au maximum un exemple. J'utilise beaucoup die(); dans mes tests de securité.
Apparement la multiplication des </body></html> posent problemes
Ca remet en question une bonne partie du fonctionnement de HandCoder sur les fichiers PHP.
Je vois bien d'où vient ce bug. HandCoder tronque le fichier courant après </html>, pour le cas où quelqu'un ferait une page du type :
Code : Tout sélectionner
<?php [code quelconque] ?>
<html>
<head> ... </head>
<body> ... </body>
</html>
<?php [quelque chose] ?>
Ceci dit, le problème reste entier si une balise PHP contient une chaîne "<html>". Il faut que je regarde ça plus attentivement.
Oui, en effet. Pas seulement avec DW d'ailleurs : j'utilise beaucoup SciTE en parallèle avec Visual Studio.Do-IT a écrit :C'est les mauvaises habitudes qu'on prend avec DW. Je le fais aussi (travailler avec plusieurs documents a la fois, simultanement sur le code et le wysiwyg).
Efficace mais pas très pratique.Do-IT a écrit :Forcer la fermeture du fichier avant d'ouvrir l'editeur externe ? Puis on le reouvre manuellement ?
Surtout, on perdrait la possibilité d'annuler les modifications faites dans l'éditeur externe.
Je pense essayer de faire en sorte que HandCoder :Do-IT a écrit :lorsque nvu devient actif (en 1er plan), fermer et réouvrir les fichiers plus recents ? Ou les fichiers ouverts via la fonction Editeur.
- mémorise la date de modification de tous les fichiers ouverts par Nvu dans un tableau interne ;
- actualise ce tableau à chaque fois qu'on enregistre une page sous Nvu ;
- vérifie que la date de modification du fichier courant n'ait pas été modifiée lorsque Nvu redevient actif, ou lorsqu'on change d'onglet
La seule question que je me pose, c'est : "dois-je essayer de coder ça avant la première release ?"
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
En fait, comme tu le sais (fait pas semblant), le php est executé sur le serveur donc meme s'il est apres le </html> il est quand meme executer avant !Kaze a écrit :mais ça doit être idiot, dans la mesure où il n'y a aucun intérêt à mettre du code PHP après la fin du document HTML
Moi j'ai deux type de fichiers :
-ceux avec que du php
-ceux avec une structure html, et qui se termine effectivement par un </html>
Mais theoriquement (?) rien ne devrait empecher de mettre du php apres la fin d'un fichier html, meme si je ne le fait pas personnelement. J'ai déjà vu des structure html reparti sur plusieurs fichiers, avec du code php dans tous les sens. On trouve de tout sur internet. Humm !
Mais ce qu'on veut faire nous c'est du code html/php propre.
Ca depend de la météo, et du couvre-feu, chez toi.Kaze a écrit :"dois-je essayer de coder ça avant la première release ?"
Sinon, en attendant forcer la fermeture du fichier ou limiter l'ouverture dans nvu d'un seul fichier à la fois. Humm !
Rudy
Soutenir KompoZer
Deux modifications principales :
- le vilain bug qui supprime des lignes PHP semble résolu ;
- la détection "fichier modifié" a été complètement refaite, elle permet maintenant de garder SciTE ouvert sur une page ouverte par Nvu ; j'ai décommenté une ligne dans les préférences de mon SciTE :
ce qui me permet de visualiser le code de toutes mes pages web dans une seule fenêtre SciTE, que du bonheur !
Code : Tout sélectionner
check.if.already.open=1
J'ai maintenant une version 0.3 de NsmConText qui est compatible avec la version courante de HandCoder, ainsi qu'une nouvelle page mozdev... reste (quand même !) à valider HandCoder.
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
A priori, plus moyen d'ouvrir un fichier avec nvu, ni php ni html
Soutenir KompoZer
Ben j'ai menti

La même extension avec la classe "phpIO" mise à jour, ça ira mieux : 20051111b-fr.
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
mais vu l'heure tardive juste un petit pour la nuit:
Code : Tout sélectionner
<?php [code quelconque] ?>
<html>
<head> ... </head>
<body><table width=100%><tr><td>bla</td></tr></table></body>
</html>
Je sais il faut les "". Alors que sans php (et sans open with), nvu s'en sort mieux.
J'ai prevenu c'etait un petit pour la nuit.
Rudy
Soutenir KompoZer
J'espère que ça n'est pas un cas trop tordu...Do-IT a écrit :Pour les fichiers de tests c'est bon, mais mon gros fichier se fait toujours massacrer de la meme maniere.
Ah oui, effectivement !Do-IT a écrit :juste un petit pour la nuit [...]

C'est le mode "compatibilité balises courtes" qui transforme tous les "%>" en "?>"... yakamettre les guillemets aux valeurs des attributs !
Faudra que j'affine ça, mais pas cette nuit

Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
J'ai simplifié au maximumKaze a écrit :J'espère que ça n'est pas un cas trop tordu...
Code : Tout sélectionner
<?php [code quelconque] ?>
<html>
<head> ... </head>
<body><?php
// print "</body></html>";
// print "</body></html>";
// print "?";
?>
</body>
</html>
le "?" seul sans le print suffit a provoquer le bug
Soutenir KompoZer
Code : Tout sélectionner
<body <?php if ($condition) print ' onLoad="vazy()"'; ?>>
Code : Tout sélectionner
<body =""><?php if ($condition) print ' onLoad="vazy()"'; ?>>
Code : Tout sélectionner
<body =""><?php if ($condition) print ' onLoad="vazy()"'; ?>>
Soutenir KompoZer
Il y aurait très long à discuter sur ce qu'on appelle du code HTML/PHP "propre".Do-IT a écrit :On trouve de tout sur internet. Humm !
Mais ce qu'on veut faire nous c'est du code html/php propre.
Personellement, je considère "malpropre" de mélanger HTML et PHP dans un même fichier

Je recours donc à des moteurs de templates tels que Smarty ou FastTemplates. Mais il m'arrive quand même d'inclure une ligne de PHP de temps en temps, pour insérer une balise ou un attribut. Dans les deux cas, mon squelette PHP reste un document conforme XML.
Le but de HandCoder est de permettre l'édition de tout template PHP conforme XML...
Il est impossible d'utiliser Nvu sur des documents non-HTML et non-XML.
Effectivement.Do-IT a écrit :le "?" seul sans le print suffit a provoquer le bug
C'est un gros bug qu'il faut que je corrige avant la release (le code étant "conforme XML").
Là par contre, ce n'est pas conforme XML.Do-IT a écrit :Je l'[invente] pas, c'est du code que j'utilise !Ouvert directement par nvu donneCode : Tout sélectionner
<body <?php if ($condition) print ' onLoad="vazy()"'; ?>>
Avec un open with nvu donneCode : Tout sélectionner
<body =""><?php if ($condition) print ' onLoad="vazy()"'; ?>>
Code : Tout sélectionner
<body =""><?php if ($condition) print ' onLoad="vazy()"'; ?>>
Tu peux éventuellement utiliser une forme :
Code : Tout sélectionner
<body onLoad="<?php if ($condition) print 'vazy()'; ?>">
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Qui est en ligne ?
Utilisateurs parcourant ce forum : Semrush [Bot] et 2 invités