Formatage de code <pre>, wordwrap, etc...

Formatage de code <pre>, wordwrap, etc... - PHP - Programmation

Marsh Posté le 02-04-2005 à 17:53:14    

Bon alors voilà je travail donc actuellement sur un forum et en fait lorsqu'un visiteur veut afficher du code, celui ci est placé entre les balises <pre> et </pre> histoire de faire ca de facon "conforme" afin d'avoir les espaces et tabulation en début de ligne.
 
Cependant le problème est que tant qu'il n'y a pas de retour à la ligne dans la chaine, il n'y en a pas non plus dans le rendu donc ca detruit quelque peu voir beaucoup le design de la page.
 
Donc j'ai étudié quelques solutions:
 
CSS:

Code :
  1. pre{
  2.    overflow: auto;
  3. }


 
Cette solution fonctionne sur certains navigateurs mais pas d'autre et comme je souhaite assurer un maximum de compatibilité cette solution ne me convient pas.
 
Ensuite j'ai cherché des solutions a travers le net, et tout ce que j'ai trouvé c'est un script en js qui refait le formatage une fois la page chargée. L'ennui est que durant le chargement le design est quelque peu étrange et ce script allourdi de facon suffisament importante le poids de la page pour que je choississe de ne pas l'utilisé.
 
Alors comme toutes ces solutions coté client n'ont pas fonctionné, je me suis tourné vers une solution coté serveur, donc php (ce pourquoi je poste ici). J'ai pensé que wordwrap irait bien, cela dit il y a encore problème.
 
Je m'explique:
Si par exemple j'ai le code suivant

Code :
  1. <?
  2. $str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
  3. $str = wordwrap($str,4,\n,0);
  4. echo $str;
  5. ?>


 
Et bien la chaine n'est pas découpée mais laissée en entier.
 
--------
 

Code :
  1. <?
  2. $str = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
  3. $str = wordwrap($str,4,"\n",1);
  4. echo $str;
  5. ?>


 
Ca fonctionne bien.
 
L'ennui c'est qu'avec ce code, les mots qu'il suffirait de placer à la ligne suivante sont barebarement coupés en deux ce qui enlève de la lisibilité.
 
Alors voilà après avoir fait moulte tentatives avec diverses solutions je me demandais comment pouvait on faire pour que:
 
- Un mot dont la longeure est trop grande soit coupé en deux
- Un mot qu'il suffit de placé à la ligne suivante soit placé a cette ligne plutot que coupé en deux
 
Merci bien!
Et bonne soirée à tous.


Message édité par dwogsi le 02-04-2005 à 21:37:43

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 02-04-2005 à 17:53:14   

Reply

Marsh Posté le 02-04-2005 à 18:18:19    


et qq chose du genre :
1- tu fais wordwrap($str,4,\n,0);
2- si dans la phrase ainsi decoupé il y a des "mots" trop longs, alors wordwrap($str,4,\n,1);
 
 
Autre solution, plus elegante : en programmation , il y a d'autre séparateurs que les retours a la ligne ( ;, ) {}

Reply

Marsh Posté le 02-04-2005 à 18:32:31    

flo850 a écrit :

et qq chose du genre :
1- tu fais wordwrap($str,4,\n,0);
2- si dans la phrase ainsi decoupé il y a des "mots" trop longs, alors wordwrap($str,4,\n,1);


 
Tu voudrais dire que je la passe dans deux wordwrap avec des paramètres différents? Ca dois pouvoir marcher je vais essayer et si ca marche merci et je suis un co*.
 
 

flo850 a écrit :


Autre solution, plus elegante : en programmation , il y a d'autre séparateurs que les retours a la ligne ( ;, ) {}


 
En revanche je ne vois pas très bien ce que tu veux dire ici...


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 02-04-2005 à 20:19:43    

c pour presenter correctement des morceaux de code ?
tu ne te base , pour le momentque sur le caractère de fin de ligne pour les césures, alors que tu pourrai aussi e baser sur d'autres caractères

Reply

Marsh Posté le 02-04-2005 à 20:44:28    

Oui effectivement c'est pour présenter du code correctement, mais je ne me base pas du tout sur les caractéres de fin de ligne...


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed