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

arno.
Varan
Messages : 1347
Inscription : 19 août 2004, 12:26

Message par arno. »

hmmm....
effectivement c'est plus complique.
Je ne sais pas si c'est possible de faire ca dans la mesure ou tu ne connais pas a l'avance, ni le nombre de pre, ni le nombre de br. En tout cas, si c'est possible, ca doit etre sacrement alambique.
As-tu pense a parser ta chaine afin de creer ta regexp a chaque fois ?
Kazé
Varan
Messages : 1743
Inscription : 10 févr. 2005, 10:26

Message par Kazé »

Non, je n'y ai pas pensé. Je me suis acharné à trouver une syntaxe du type :

Code : Tout sélectionner

function EscapeBR(data) {
    return data.replace(/<br \/>/g, '\n');
}
[...]
newString = docString.replace(/<pre([^<]*)<\/pre>/g, EscapeBR($1));
mais ça n'a pas l'air de vouloir fonctionner.
Est-ce une limitation du support des regexp par le moteur JavaScript de Gecko ? Ou est-ce tout simplement incorrect de passer un $1 en paramètre de fonction dans ce cas ?

Je vais faire quelques essais ce soir ; dans le pire des cas je coderai une merdouille à coups de boucles... mais je n'ose pas imaginer l'impact sur les performances quand on édite une page de 100 KO !
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
arno. sans ses cookies

Message par arno. sans ses cookies »

ah oui, pas bete l'appel de la fonction, c'est bizarre que ca ne marche pas. Ca te donne quoi comme resultat ?
Sinon, je viens de penser a une solution a une boucle et sans regexp, mais je suis pas sur qu'elle marche.

Tu mets un boolean isInsidePre a false.
Tu parcours ta chaine caractere par caractere.
tu regardes avec substring ou slice si tu croises un <pre>, si oui, tu passes ton boolean a true. Tu le remettras a false quand tu verras </pre>
En meme, temps, tu regardes (toujours avec substring) si tu as des balises <br />.
Si tu en as et que ton boolean est true, tu remplaces ta chaine par un string.substring(0,i) + '\n' + string.substring(i + 6, string.length)
(ou un truc dans ce gout la)

pas 100% certain que ca puisse marcher, ni que ce soit pas trop lent.
Mais en tout cas, si j'avais ca a faire, je regarderais de ce cote, c'est meme pas dit que ce soit plus lent que deux regexp imbriquees.
Do-IT
Iguane
Messages : 537
Inscription : 03 juil. 2005, 09:46

Message par Do-IT »

Kaze a écrit :Tu peux essayer l'option --keep-time yes pour ne pas modifier la date du fichier au lancement de Tidy. Je n'ai jamais essayé cette option sous Windows...
Ca fonctionne, la date de la derniere modification ne bouge pas, seule la date du dernier accès est modifiée.
winxp, hancoder option tidy sur 'editeur' (recommandé). l'option 'chaque sauvegarde' n'as pas de sens pour ce test ? Au fait l'option 'sur demande' correspond a quelle action ?

Rudy
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 :Ca fonctionne, la date de la derniere modification ne bouge pas, seule la date du dernier accès est modifiée.
Comme quoi XP n'est pas si mauvais ! Je vais mettre cette option par défaut dans le panneau d'options de HandCoder.
Do-IT a écrit :l'option 'chaque sauvegarde' n'as pas de sens pour ce test ?
En effet !
Do-IT a écrit :Au fait l'option 'sur demande' correspond a quelle action ?
Ah oui tiens, j'ai oublié quelque chose là... :roll:
Ca correspond au raccourci clavier [F7], qui justement est buggé sur cette beta.
Je vais faire un menu "HandCoder" dans le menu "Outils", qui contiendra les items "Editeur texte [F6]", "Tidy [F7]" et "options...", ça sera plus clair.
arno. sans ses cookies a écrit :ah oui, pas bete l'appel de la fonction, c'est bizarre que ca ne marche pas. Ca te donne quoi comme resultat ?
Ca me donne une erreur dans la console JavaScript ($1 is not defined), parce que j'ai oublié les guillemets autour de $1 !
Quand je dis que je suis nul en regexp... :oops:
Bon, si je pense aux guillemets, ça me retourne exactement la chaîne d'origine, comme si les expressions rationnelles étaient ignorées dans la fonction "EscapeBR". J'ai vérifié que le contenu de "$1" était bien passé à cette fonction...

Je crois que ça va se terminer avec une boucle...
ton algo est sûrement fonctionnel, mais parcourir un texte caractère par caractère (en incluant des registres à décalage pour tester les "<br />"), ça risque d'être longuet pour du JavaScript...

Au fait, une question plus simple : quelle expression rationnelle utiliserais-tu pour capturer toute une balise <pre> ... </pre> ? La regexp /<pre([^<]*)<\/pre>/ ne fonctionne pas, justement à cause des <br /> contenus dans la balise !
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
arno. sans ses cookies

Message par arno. sans ses cookies »

Kaze a écrit :Au fait, une question plus simple : quelle expression rationnelle utiliserais-tu pour capturer toute une balise <pre> ... </pre> ? La regexp /<pre([^<]*)<\/pre>/ ne fonctionne pas, justement à cause des <br /> contenus dans la balise !
Je sais pas :idea: meme tes questions faciles, elles sont difficiles :shock:
En tout cas, pour les regexp javascript, si tu le connais pas deja, je te conseille ce tutoriel la :
http://www.webreference.com/js/column5/

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

Message par Kazé »

Non, je ne connaissais pas celui-là. Ca a l'air assez exhaustif, ça va être mon livre de chevet pour ce soir.

Par contre j'ai la réponse (mais y'a de la triche) :

Code : Tout sélectionner

/<pre[^\r\n]*/g
ça ne fonctionne qu'avec Nvu, qui code toutes ses balises <pre /> sur une seule ligne (alors qu'il casse les lignes des autres balises à une soixantaine de caractères).

Du coup il suffit de 3 lignes de code :

Code : Tout sélectionner

	var lines = source.match(/<pre[^\r\n]*/g);
	for (var i = 0; i < lines.length; i++) 
		source = source.replace(lines[i], lines[i].replace(/<br \/>/g, '\n'));
C'était tellement simple que je me sens un peu c**... :roll:
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é »

Une nouvelle beta : HandCoder-20051103-fr

Là je crois qu'on se rapproche dangereusement de la release :
  • les <br /> sont remplacés par des fins de ligne dans les blocs <pre /> :D
  • il y a un menu "HandCoder" dans le menu "Outils" qui permet de lancer l'éditeur (F6) et Tidy (F7) ; le bouton "Editeur" n'est donc plus indispensable
  • localisé en français, anglais, allemand, italien, russe et chinois
Avant la release, je vais essayer de corriger le bug signalé par Do-IT, concernant les scripts PHP qui se décalent vers la droite à chaque appel de Tidy. Quelques expressions rationnelles bien senties pourraient s'avérer efficaces (je commence à être chaud sur le sujet)...
  • Mise à jour (4/11/2005, 15h) :
    ce bug est beaucoup plus pénible que prévu. Il est possible de ne pas décaler les scripts PHP, mais au prix de manipulations vraiment pénibles... et en perdant une partie de l'indentation à l'intérieur du script, ce que je trouve rédhibitoire.
    Personnellement je n'utilise quasiment jamais de script PHP de plus d'une ligne à l'intérieur d'un document HTML (les scripts d'une ligne ne sont pas concernés par ce bug) ; je préfère de loin recourir à des moteurs de templates et/ou des fichiers externes. Mais en faisant ces tests je me suis rendu compte que Nvu était, de toutes façons, particulièrement mal pratique pour les longs scripts PHP (ne serait-ce que parce que la fenêtre d'édition de code n'est pas retaillable).
    Bien sûr, je continuerai à chercher à améliorer ce point (peut-être en proposant un patch à l'équipe de Tidy), mais ça ne sera pas prêt pour la prochaine release.
Les rapports de bugs sont bienvenus, comme d'hab :wink:
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 »

HandCoder-20051103-fr
Apres un rapide coup d'oeil, j'ai quelques fonctionnements aleatoires :
- bouton Editer grisé mais F6 fonctionne (sur nouveau fichier),
- toujours des br dans les pre (bizarre),
- ecrasement du fichier dans l'onglet par l'ouverture d'un autre fichier (apres open with),
- F6 ou F7 sur un nouveau fichier qui provoque l'enregistrement (normal), mais sans suite apres l'enregistrement.
Je ferais des tests répétitifs ce we.

Pour le php, c'est tidy qui provoque le decalage ? Y'a pas moyen de lui dire d'ignorer ce qui est entre les balises php ? Ou de réinjecter le code php dans le fichier apres un tidy.
Parceque ni les decalages, ni aucune indentation ne sont souhaitables. Et moi j'ai frequement 50 lignes de code php d'affilées. Quand a l'editeur de code de nvu je ne compte pas l'utiliser. En attendant j'ai mis Tidy sur F7 seulement.

j'ai un fichier php qui a perdu un paquet de ligne php, faut que je verifie mes archives chez moi.

Rudy
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 :bouton Editer grisé mais F6 fonctionne (sur nouveau fichier) [...]
F6 ou F7 sur un nouveau fichier qui provoque l'enregistrement (normal), mais sans suite apres l'enregistrement.
Normalement, le bouton "Editer" devrait être grisé si la page courante n'a pas encore été sauvegardée sur le disque dur.
F6 et F7 devraient être grisés en même temps que "Editer" mais j'ai oublié de l'implémenter...
Bref, c'est prévu pour que l'utilisateur enregistre sa page courante (au moins une fois) AVANT de lancer Tidy ou l'éditeur ; je vais faire en sorte que ça fonctionne aussi sur les nouveaux fichiers.
Do-IT a écrit :toujours des br dans les pre (bizarre)
HandCoder ne corrige ça qu'au moment de lancer Tidy.
Si il y a toujours des BR dans les PRE après un F7, poste-moi le source de ta page STP.
Do-IT a écrit :ecrasement du fichier dans l'onglet par l'ouverture d'un autre fichier (apres open with)
bizarre. Je vais essayer de reproduire ce bug.
Do-IT a écrit :Pour le php, c'est tidy qui provoque le decalage ? Y'a pas moyen de lui dire d'ignorer ce qui est entre les balises php ? Ou de réinjecter le code php dans le fichier apres un tidy.
Parceque ni les decalages, ni aucune indentation ne sont souhaitables. Et moi j'ai frequement 50 lignes de code php d'affilées.
Oui, c'est Tidy qui décale les scripts PHP à partir de leur deuxième ligne. Et non, je n'ai pas vu d'option qui permette d'ignorer le contenu des <?php ... ?>.
Le mieux serait de modifier Tidy, je jetterai un coup d'oeil au code source ces jours-ci.

En dernier recours, je pourrais lancer une correction du décalage après Tidy, mais cette méthode aurait deux gros inconvénients : ça doublerait le temps de sauvegarde, et ça me compliquerait énormément le support de Tidy sous MacOS X (qui n'est déjà pas brillant !).

Si tu as 50 lignes de code PHP, tu as vraisemblablement besoin de conserver ton indentation, par ex :

Code : Tout sélectionner

if (test)
    for(i=0; i<100; i++)
        echo(".");
else
    echo("no test.");
devient illisible (bien que toujours fonctionnel) sans indentation. Or pour l'instant, toutes les corrections que j'ai essayées modifiait cette indentation.
Je ne laisse pas tomber cette histoire de décalage des scripts PHP, mais je continue à chercher une méthode plus "saine".
Do-IT a écrit :j'ai un fichier php qui a perdu un paquet de ligne php, faut que je verifie mes archives chez moi.
Ca, c'est LE point à surveiller attentivement. Si tu as un fichier PHP qui est corrompu par Nvu + HandCoder, poste-moi sa source STP.
Do-IT a écrit :Je ferais des tests répétitifs ce we.
Il pleut chez toi aussi ? ;)
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é »

La beta du week-end : HandCoder-20051106-fr

Peu de nouveautés :
  • quelques modifications pour permettre la compatibilité avec NsmConText ;
  • j'ai implémenté une horreur qui réinjecte le code PHP de Nvu dans le code reformatté par Tidy, s'il y a des scripts PHP de plus d'une ligne... C'est du provisoire, en attendant de patcher Tidy, et de trouver une méthode de lancement de Tidy sous MacOS X.
Chez moi ça résoud le problème du décalage des scripts.
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 »

HandCoder-20051106-fr

tidy supprime les balises vide ex: <p></p> <h1></h1>

Si j'ai bien compris l'histoire des pre, nvu remet chaque fois les br supprimer par tidy.

a l'ouverture de nvu, bouton editeur F6 F7 ne sont pas grisés.

C'est tout pour l'instant, j'en garde un peu pour plus tard.
Il fait toujours soleil en Alsace, la plus belle région de France !
Et le forum est toujours a l'heure d'été.
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 :tidy supprime les balises vide ex: <p></p> <h1></h1>
Oui, pour une raison de conformité que je n'ai pas bien comprise.
Il y a une option pour ne pas supprimer les balises vides : --drop-empty-paras no
Alternative : mets un espace insécable (&nbsp;) dans tes balises vides si tu veux les conserver.
Do-IT a écrit :Si j'ai bien compris l'histoire des pre, nvu remet chaque fois les br supprimer par tidy.
Oui. Précisément, il remplace les fins de ligne par des <br />.
C'est équivalent dans le navigateur, mais c'est particulièrement pénible pour l'édition en mode texte.
Do-IT a écrit :a l'ouverture de nvu, bouton editeur F6 F7 ne sont pas grisés.
Moi aussi j'en garde un peu pour plus tard ;)
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 »

tidy est faché avec les feuilles de style interne

<style type="text/css">
/*<![CDATA[*/
pre { color: rgb(255, 0, 0);
}
/*]]>*/
</style>

ou

<style type="text/css">
/*<![CDATA[*/
p { color: rgb(255, 0, 0);
}
/*]]>*/
</style>

Rudy
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é »

Oui, il inclut les feuilles de style internes dans une balise CDATA.
C'est gênant ? Je veux dire, ça pose un problème sous Nvu ?
KompoZer lead dev
Ubuntu 10.04 Lucid Lynx — « L'erreur est humaine, mais vraiment foutre la merde nécessite le mot de passe root. »
Répondre

Qui est en ligne ?

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