HandCoder : extension Nvu pour Tidy et PHP

Le premier forum francophone sur l'éditeur de pages Web multiplateforme (Linux, Mac OS X, Windows) qui monte… KompoZer, héritier de Nvu, permet de créer vos pages Web graphiquement (wysiwyg) sans aucune connaissance du langage HTML.

Modérateur : chinon37

Kazé
Varan
Messages : 1743
Inscription : 10 févr. 2005, 10:26

Message par Kazé »

Quels autres utilisateurs ? Franchement, à part Ymai, chinon et toi...

La 0.3.2 est bien buggée : la détection des fichiers modifiés ne fonctionne pas, impossible d'enregistrer en UTF-8, et dans certains cas on perdait du PHP. Je commence à recevoir pas mal de mails d'utilisateurs qui constatent les bugs de la 0.3.2 ; la 0.3.3 ne peut qu'être meilleure...

De toutes façons, ça n'est qu'une version intermédiaire, puisqu'il faut encore que je modifie la gestion des prologues et que j'implémente le support des balises courtes <% %>, ce qui suppose des modifs assez lourdes ; donc il faut que je fige l'état courant avant de trafiquer le code.
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Kazé
Varan
Messages : 1743
Inscription : 10 févr. 2005, 10:26

Message par Kazé »

J'attaque la 0.3.4. Le premier objectif serait de supporter ce prologue :

Code : Tout sélectionner

<?php echo "<?xml version=\"1.0\"?>"; ?>
<?php defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); ?>
J'ai modifié hc pour qu'il puisse accepter plusieurs blocs comme prologue. Ca marchouille.
Par contre, avec Tidy on a un gros problème : la ligne

Code : Tout sélectionner

<?php echo "<?xml version=\"1.0\"?>"; ?>
plante Tidy lamentablement. Comme Nvu (et la plupart des parsers html/xml), Tidy s'arrête au premier ?> qu'il trouve, ce qui détruit le document...

On ne peut pas non plus (semble-t'il) utiliser un prologue plus simple, du style :

Code : Tout sélectionner

<?xml version="1.0"?>
<?php defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' ); ?>
car le parser PHP interprète le <?xml comme un début d'instruction PHP. C'est parfaitement idiot mais ça explique pourquoi la ligne echo "<?xml version=\"1.0\"?>" est si courante. Ca n'est probablement plus vrai avec PHP5, puisque la forme courte <? ... ?> n'est plus autorisée.

Alternatives pour contourner ce bug :
  1. <?php echo "<?xml version=\"1.0\"?" . ">"; ?>
  2. <?php include('xmlprolog.txt'); ?>
  3. utiliser hc030, qui stocke le prologue dans un fichier texte séparé (ce qui ralentit sensiblement chaque sauvegarde)
  4. ne pas utiliser Tidy (mais franchement, un fichier PHP édité par Nvu et pas reformatté par Tidy, ça doit pas être simple à éditer...)
Si quelqu'un a une idée, merci d'avance... :roll:
Dernière modification par Kazé le 19 mai 2006, 19:01, modifié 2 fois.
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Do-IT
Iguane
Messages : 537
Inscription : 03 juil. 2005, 09:46

Message par Do-IT »

Kaze a écrit :<?php echo <?xml version="1.0"?>"; ?>
Dans tous tes codes il manque un " après le echo. (ca fait des parse error dans ma tête)

La première solution me semble être la moins compliqué (quoi que).

On récupère la chaîne à afficher qui commence après le echo et qui se termine par ; "<?xml version="1.0"?>"

on isole les ? (il faut détecter le type de guillemet)
"<"."?"."xml version="1.0""."?".">"
'<'.'?'.'xml version="1.0"'.'?'.'>'

ou on remplace les ? par %c et on met la chaîne dans un sprintf
sprintf("<%cxml version="1.0"%c>", 63)
ce qui donne
<?php echo sprintf("<%cxml version="1.0"%c>", 63); ?>
Jamais utilisé, ca reste de la pure théorie. Je connais cette fonction depuis 1 minute. En html ça devrait afficher
<?xml version="1.0"?>
Redhat, CentOs, Mandriva, Ubuntu au boulot. Ubuntu à la maison. Vista et Xp grâce à la vente liée.
Soutenir KompoZer
Kazé
Varan
Messages : 1743
Inscription : 10 févr. 2005, 10:26

Message par Kazé »

J'ai corrigé les echo :oops:
Do-IT a écrit :qui commence après le echo et qui se termine par ;
Bonsanmécébiensûr !
Il suffit de scinder les chaînes ?> qui suivent les echo et de laisser les autres tranquilles.
Pour la détection du guillemet, on doit pouvoir considérer que c'est celui qui suit le echo qui est utilisé sur toute la ligne. Evidemment c'est plantable avec une ligne du type :

Code : Tout sélectionner

<?php echo '<?xml version=' . $xmlVersion . "?>"; ?>
mais de toutes façons, aucun parser html ou xml ne sera jamais 100% sûr pour éditer du PHP, donc on peut se cantonner aux cas les plus fréquents.

Sinon, je viens de déterrer TidyLib. Il y a peut-être une solution en bricolant de ce coté-là, car je pourrais reformatter le code en mémoire vive plutôt que sur le disque dur. Du coup je pourrais reformatter le code sans le prologue, puis ajouter le prologue et sauvegarder...
Le problème, c'est que j'ai déjà perdu pas mal de pages avec TidyLib, sans comprendre pourquoi. C'était peut-être lié aux problèmes d'encodage des versions < 0.3.3, ça mérite quelques tests supplémentaires.

PS: TidyLib transforme le HTML 4.01 Strict en Transitional... :(
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Do-IT
Iguane
Messages : 537
Inscription : 03 juil. 2005, 09:46

Message par Do-IT »

Kaze a écrit :Evidemment c'est plantable avec une ligne du type :

Code : Tout sélectionner

<?php echo '<?xml version=' . $xmlVersion . "?>"; ?>
D'où le quoi que. Mais on peut faire plus simple :

Code : Tout sélectionner

<?php echo "<?xml version=".'"1.0"?>'; ?>
Tu pourra pas te passer de la détection des guillemets.
Le sprintf à l'air plus blindé
<?php echo sprintf('<?xml version="1.0"'."%c>", 63); ?> (Testé, ca fonctionne)
Pas besoin de détecter les guillemets.
Il y a sûrement une meilleure solution que d'ajouter une fonction php que ce soit sprintf ou une autre.
Autre solution dont je ne suis pas convaincu :
<?php echo "<?xml version="1.0"?".chr(62); ?>
Kaze a écrit :Sinon, je viens de déterrer TidyLib
hc0.3.9b. Onglet source me donne une fenetre d'alerte Prettyprint:true
F7 aussi. Avec une preview de code source. On va dire que c'est normal.
Vu que j'ai toujours tidy de configurer il utilise pas tidylib, je pense. Idem :( pour Strict en Transitional
Redhat, CentOs, Mandriva, Ubuntu au boulot. Ubuntu à la maison. Vista et Xp grâce à la vente liée.
Soutenir KompoZer
Kazé
Varan
Messages : 1743
Inscription : 10 févr. 2005, 10:26

Message par Kazé »

Le sprintf est une bonne idée. C'est clairement plus robuste, c'est même un peu plus simple à coder, mais j'ai peur que ça ne perturbe les utilisateurs ; alors qu'en scindant les ?>, je parie que la plupart ne verront pas la modification.
Do-IT a écrit :hc0.3.9b.
Bah ça m'apprendra à stocker mes versions de travail sur mon site web ! (j'avais oublié ma clé USB...)
Tu noteras que ça préserve n'importe quel prologue...
Do-IT a écrit :Vu que j'ai toujours tidy de configurer il utilise pas tidylib, je pense.
TidyLib est lancé lors de chaque sauvegarde, mais c'est presque trop rapide pour qu'on s'en rende compte.
"prettyPrint" correspond à l'état de la préférence Nvu "reformatter la source HTML". L'idée serait de ne lancer TidyLib que si "prettyPrint" est vrai...
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Do-IT
Iguane
Messages : 537
Inscription : 03 juil. 2005, 09:46

Message par Do-IT »

Une site web c'est vaste, là c'était le dossier 'officiel'.
Donc j'ai installé la 0.3.3rc4, et là j'ai eu une crise cardiaque. Il y a eu une page intermediaire qui est resté affiché 1 seconde (avec des barres de progression qui défilent) puis ça. Ce qui est bizarre c'est que j'ai rien demandé, et j'ai jamais cliqué sur Mise à jour. On va dire que c'est normal. (Que le mise à jour se soit lancée toute seule)
Bon après ces moments chargés en émotions, on va repassé aux choses sérieuses.
Redhat, CentOs, Mandriva, Ubuntu au boulot. Ubuntu à la maison. Vista et Xp grâce à la vente liée.
Soutenir KompoZer
Kazé
Varan
Messages : 1743
Inscription : 10 févr. 2005, 10:26

Message par Kazé »

La rc4 vient de devenir la version 0.3.3 'officielle'. Je mettrai mon site web à jour dans le week-end.
La 0.3.4 devrait arriver rapidement (nouvelle gestion des prologues + support ASP/JSP). Ca commence à devenir stable tout ça...
Do-IT a écrit :Une site web c'est vaste, là c'était le dossier 'officiel'.
Je viens de mettre des "Deny all" dans les dossiers xpi 'officiels'. :twisted:
Do-IT a écrit :Donc j'ai installé la 0.3.3rc4, et là j'ai eu une crise cardiaque.
Nvu ne doit pas aimer quand on repasse à une version antérieure d'une extension. Bizarre.
Ca me rappelle qu'il faudrait que j'implémente la mise à jour automatique pour mes extensions !
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Do-IT
Iguane
Messages : 537
Inscription : 03 juil. 2005, 09:46

Message par Do-IT »

hc0.3.3
C'est des vieux bug, mais j'en reparle un peu :
- le code php subit 'toujours encore' un décalage lors de chaque lancement de tidy, à partir de la 2eme ligne de code php. (idem sous xp & linux)
- Si on faire une modif dans nvu dans l'onglet source, le code php se retrouve sur une ligne. (idem sous xp & linux). C'est pour ca que j'ai viré la barre d'outils Mode d'édition sur mon nvu de 'travail'.
Redhat, CentOs, Mandriva, Ubuntu au boulot. Ubuntu à la maison. Vista et Xp grâce à la vente liée.
Soutenir KompoZer
Kazé
Varan
Messages : 1743
Inscription : 10 févr. 2005, 10:26

Message par Kazé »

Do-IT a écrit :le code php subit 'toujours encore' un décalage lors de chaque lancement de tidy, à partir de la 2eme ligne de code php. (idem sous xp & linux)
Ca avait été partiellement résolu avec la 0.3.2, mais ça créait d'autres bugs liés à la gestion du prologue (cf. le thread d'Ymai).
Si on lance Tidy plusieurs fois de suite, ça augmente le décalage des scripts PHP. Par contre, si on lance Tidy à la sauvegarde, le décalage reste stable.

En lançant TidyLib uniquement à la sauvegarde, ça résoudrait ce problème, celui des prologues, et plus généralement ça permettrait d'envisager le support de balises non HTML comme SPIP, MathML...
Do-IT a écrit :Si on faire une modif dans nvu dans l'onglet source, le code php se retrouve sur une ligne. (idem sous xp & linux).
Oui, idem pour les balises <pre>, même sans HandCoder.
C'est pénible. C'est même dangereux quand on utilise des commentaires de fin de ligne (//) plutôt que des blocs (/* */).
J'ai essayé de corriger ça mais je n'y suis pas arrivé. :(
Là encore, en intégrant TidyLib il y a peut-être moyen de résoudre le problème.
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Do-IT
Iguane
Messages : 537
Inscription : 03 juil. 2005, 09:46

Message par Do-IT »

Kaze a écrit :En lançant TidyLib uniquement à la sauvegarde, ça résoudrait ce problème, ...
J'ai mis Tidy (pas lib) à la sauvegarde + nettoyeur, on va voir ce que ça donne.

Le bouton éditeur n'est compatible avec aucun des 4 autres thèmes. Ça donne toujours une superposition de 3 boutons éditeur.
Image
Redhat, CentOs, Mandriva, Ubuntu au boulot. Ubuntu à la maison. Vista et Xp grâce à la vente liée.
Soutenir KompoZer
chinon37
Animal mythique
Messages : 5319
Inscription : 21 mars 2005, 10:17

Message par chinon37 »

les précédentes versions posaient le même probléme avec les autres thèmes...
Préferez Kompozer 0.8 à Nvu
Défendons nos valeurs, adhérons à l'APRIL
La Démocratie, c'est quand on frappe à votre porte à 6h00 du matin, et que c'est le laitier.
Do-IT
Iguane
Messages : 537
Inscription : 03 juil. 2005, 09:46

Message par Do-IT »

Do-IT a écrit :Tiens j'ai encore un code php qui disparaît à 100%, merci nvu. (à suivre... dans l'autre sujet...)
On a sûrement déjà parlé de la forme courte des balises php ?

Code : Tout sélectionner

<? print "bla"; ?>
Bref, dans le temps j'utilisais ça.
Nvu seul n'apprécie pas, il supprime tout.
nvu+hc, pareil.
nvu+nsm, là c'est bizarre ça ouvre rien

Code : Tout sélectionner

Erreur : window.top.document.open is not a function
Fichier source : chrome://nsmcontext/content/sitemanagerOverlay.js
Ligne : 121
Seul Kaze saura pourquoi j'ai mis ça dans ce sujet.
Redhat, CentOs, Mandriva, Ubuntu au boulot. Ubuntu à la maison. Vista et Xp grâce à la vente liée.
Soutenir KompoZer
Kazé
Varan
Messages : 1743
Inscription : 10 févr. 2005, 10:26

Message par Kazé »

Le bouton "Editeur" ne fonctionne bien qu'avec le thème par défaut. J'ai commencé à regarder pourquoi, mais je n'ai pas trouvé de solution simple pour l'instant.
Do-IT a écrit :On a sûrement déjà parlé de la forme courte des balises php ?
Effectivement, c'est une régression sur hc030. Bêtement, la forme <% %> est bien lue par hc033 (qui les transforme en <?php ?>)...
A corriger. Il devrait y avoir une beta ces jours-ci avec un (petit) support ASP/JSP.
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Do-IT
Iguane
Messages : 537
Inscription : 03 juil. 2005, 09:46

Message par Do-IT »

Kaze a écrit :Il devrait y avoir une beta ces jours-ci avec un (petit) support ASP/JSP.
Avec Tidylib et support des include ?
JSP je savais même pas que ça existait.
Redhat, CentOs, Mandriva, Ubuntu au boulot. Ubuntu à la maison. Vista et Xp grâce à la vente liée.
Soutenir KompoZer
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité