Page 1 sur 1

Interpréteur dune syntaxe semblable à celle des moteurs wiki

Posté : 28 août 2005, 13:20
par Eolymhn
Bonjour,

Pour un projet sur lequel je travaille actuellement, j'ai dût avoir recours à la syntaxe utilisée par les moteurs wiki : pour sa simplicité d'utilisation (plus accessible que l'html).

Seulement en regardant les expliquations faites de la syntaxe notament sur wikipedia, J'y ai vu beaucoups d'abérations sémantiques ...

J'ai donc décidé de la retravailler, en respectant la sémantique, et en essayant d'améliorer quelques points.

Elle est cependant actuellement beaucoups moin complète que celle des moteurs wiki, car pour le moment, je l'ai programmé seul, et je suis allé à l'essentiel requis par le projet en cours.

Je soumet ce code aujourd'hui pour partager mon travaille et pour que toute une communauté puisse travailler à son enrichissement.

Voici la page d'interprétation, incluant l'interpréteur et un formulaire pour le tester :
<?

//estimation du nombre de lignes pour l'affichage dans les textareas ....
function nblignes ($chaine) {
	$i=1;
	preg_match_all('#^#m', $chaine, $out);
	for($j=0;isset($out[0][$j]);$j++) $i++;
	return $i;
}


//############################################################################
//############################################################################
//############################ DEBUT INTERPRETEUR ############################
//############################################################################
//############################################################################



//#### LES PARAGRAPHES

// Les paragraphe se font (comme vous pourrez le voir dans l'exemple) juste en écrivant sur une nouvelle ligne ...

function wiki2html_p ($return) {
	
	// Citation de touts les cas où le code ne doit pas mettre de balise p.
	if(preg_match('#^(?:=|\*|\#|//|\n|\(:|:|;;|:\)|-{4,}|<!--|(?-s).*"""(?s)|(?U)\{.*\}(?-U)\s*$)#ms',trim($return[2]))) return $return[0];
	else return $return[1].'<p>'.trim($return[2]).'</p>';
	
}

//#### LES TITRES

/*

[x*]=[!] titre [:: id ][x*]=

([x*] correspond à x fois le caractère qui le suit (signe égal))
(les autres [] correspondent à des champs facultatifs)

Le nombre de signes égals correspond au rang du titre dans la hierarchie. Pour une adaptation, il est possible de décaler les rangs des titres du document afin que ce dernier s'adapte à la page, avec la variable $wiki2html_decalage déclarée ci-dessous. Ainsi avec la valeur de 2 =titre= donnerra une balise h(1+2) : h3 plutot qu'une h1, et ==sous-titre== donnerra une balise h4.

L'éventuel point d'exclamation après le/les premiers signes égals rend le titre invisible à l'affichage final.

Il est possible d'atribuer un id aux titres (pour des liens de positions notament), il suffit pour cela de le mettre après l'intitulé du titre, et de séparer ces deux éléments de deux "deux points".

Une ligne dont le nombre de signes égals ne serra pas égal en début et fin ne serra pas considéré comme un titre.


*/

$wiki2html_decalage=2;

function wiki2html_titre ($return) {
	global $wiki2html_decalage;
	
	$return[4] = split("::",$return[4]);
	
	$espace = $return[1];
	$titre = trim($return[4][0]);
	$niveau = strlen($return[2])+$wiki2html_decalage;
	
	if($return[3] == '!') $class = ' class="hidden"';
	else $class = '';
	
	if(isset($return[4][1])) {
		$id = trim($return[4][1]);
		if($id != "") $id = ' id="'.$id.'"';
	}
	else $id = '';
	
	return $espace.'<h'.$niveau.$id.$class.'>'.$titre.'</h'.$niveau.'>';
	
}

//#### LES BARRES HORIZONTAL

// (4 ou plus) tirés sur une ligne apart donne une barre horizontal hr.

function wiki2html_hr ($return) {
	return $return[1].'<hr />';
}

//#### LES IMAGES

/*

{ url [:: alt ][:: alignement]}

(les [] correspondent à des champs facultatifs)

Voir les exemples.

*/

function wiki2html_image ($return) {
	
	$return = split("::",$return[1]);
	
	$url = trim($return[0]);
	
	if(isset($return[1])) {
		$alt = trim($return[1]);
		if($alt != "") $alt = ' alt="'.$alt.'"';
	}
	else $alt = '';
	
	if(isset($return[2])) {
		$float = trim($return[2]);
		if($float == "<") $float = ' class="left"';
		elseif($float == ">") $float = ' class="right"';
		else $float = '';
	}
	else $float = '';
	
	return '<img src="'.$url.'"'.$alt.$float.' />';
	
}

//#### LES LIENS
/*

[ url {:: title }{:: hreflang }]intitulé[/]

(les {} correspondent à des champs facultatifs)

Voir les exemples.

*/
function wiki2html_lien ($return) {
	
	$return[1] = split("::",$return[1]);
	
	$url = trim($return[1][0]);
	$intitule = trim($return[2]);
	
	if(isset($return[1][1])) {
		$title = trim($return[1][1]);
		if($title != "") $title = ' title="'.$title.'"';
	}
	else $title = '';
	
	if(isset($return[1][2])) {
		$hreflang = trim($return[1][2]);
		if($hreflang != "") $hreflang = ' hreflang="'.$hreflang.'"';
	}
	else $hreflang = '';
	
	return '<a href="'.$url.'"'.$title.$hreflang.'>'.$intitule.'</a>';
	
}

//#### LES FORTES EMPHASES

function wiki2html_strong ($return) {
	
	$intitule = $return[1];
	
	//Vérification qu'il ne sagit pas d'une emphrase simple...
	preg_match_all('#\'\'#', $return[1], $ems);
	
	if((sizeof($ems[0])%2) == 0) return '<strong>'.$intitule.'</strong>';
	else return $return[0];
	
}

//#### LES EMPHASES

function wiki2html_em ($return) {
	
	//Je fais la démarche de traiter la chaine dans une fonction, pour prévoir d'éventuels ajouts plus complexes...
	
	$intitule = $return[1];
	
	return '<em>'.$intitule.'</em>';
	
}

//#### LES LISTES DE DEFINITIONS

/*

(:
: terme [:: id]
définition block
;;
: terme2 [:: id2]
définition2 block
;;
: terme3 [:: id3]
définition3 block
;;
:)

(les [] correspondent à des champs facultatifs)

Voir les exemples...

*/

// DT et DD

function wiki2html_ddt ($return) {
	
	
	$return[1] = split("::",$return[1]);
	
	$terme = trim($return[1][0]);
	$definition = trim($return[2]);
	
	//Ajout d'une tabulation à chaque ligne pour marquer l'appartenance à la balise dd
	$definition = preg_replace('#^#m',"\t",$definition);
	
	if(isset($return[1][1])) {
		$id = trim($return[1][1]);
		if($id != '') $id = ' id="'.$id.'"';
	}
	else $id = '';
	
	
	return "\n\t".'<dt'.$id.'>'.$terme.'</dt>'."\n\t".'<dd>'."\n\t".$definition."\n\t".'</dd>';
	
}

// DL

function wiki2html_dlist ($return) {
	
	$espace = $return[1];
	$ddt = $return[2];
	
	//traitements des termes à définir et de leur définition
	$ddt = preg_replace_callback('#^\s*:(.*)\n(?sU)(.*)(?-Us)\n\s*;;\s*\n#m','wiki2html_ddt',"\n".$ddt."\n");
	
	//Rajout de l'espace initial à chaque ligne...
	$ddt = preg_replace('#^(\s*)#m','\1'.$espace,$ddt);
	
	return $espace.'<dl>'.$ddt."\n".$espace.'</dl>';
	
}

//#### LES CITATIONS : BLOCK
/*

[ auteur ][:: titre ] """
citation en block
"""

(les [] correspondent à des champs facultatifs)

Voir les exemples...

*/
function wiki2html_blockquote ($return) {
	
	$origine = $return[1];
	$espace = $return[1];
	
	$return[2] = split("::",$return[2]);
	
	if(isset($return[2][0]) && trim($return[2][0]) != "") $auteur = trim($return[2][0]);
	if(isset($return[2][1]) && trim($return[2][1]) != "") $source = trim($return[2][1]);
	
	if(isset($auteur) || isset($source)) $origine.= '<p>Citation de <cite>';
	if(isset($auteur)) $origine.= $auteur.'</cite>';
	if(isset($auteur) && isset($source)) $origine.= ', <cite>'.$source.'</cite>';
	if(!isset($auteur) && isset($source)) $origine.= $source.'</cite>';
	if(isset($auteur) || isset($source)) $origine.= ' :</p>';
	
	//Rajout de l'espace
	$citation = preg_replace('#^#m',"\t".$espace,$return[3]);
	
	return $origine."\n".$espace.'<blockquote>'."\n".$citation."\n".$espace.'</blockquote>';
	
}


//#### LES CITATIONS : INLINE

function wiki2html_q ($return) {
	
	$intitule = $return[1];
	
	return '<q>'.$intitule.'</q>';
	
}


//#### LES LISTES

//eum ici l'interprétation a été complexe, même si l'utilisation est simple ... voir l'exemple ...
// si quelqu'un veut une expliquation du code ... je peux essayer une tentative d'expliquation ...

function wiki2html_tab ($nb) {
	$returned = "";
	for($i=0;$i<$nb;$i++) $returned.= "\t";
	return $returned;
}

$wiki2html_lastniveau = -1;
$wiki2html_type[$wiki2html_lastniveau] = "";
function wiki2html_listes ($return) {
	global $wiki2html_lastniveau,$wiki2html_type;
	
	if(preg_match('#^(\s*)([\*\#]*)(.*)#',$return[1],$liste)) {
		
		$puces = strlen($liste[2]);
		
		$niveau = $puces-1;
		$lastpuces = $wiki2html_lastniveau+1;
		
		$tab['xl'] = $niveau*2;
		$tab['last']['xl'] = $wiki2html_lastniveau*2;
		$tab['li'] = $niveau*2+1;
		$tab['last']['li'] = $wiki2html_lastniveau*2+1;
		
		if(preg_match('#\*$#', $liste[2])) $type = 'ul';
		elseif(preg_match('#\#$#', $liste[2])) $type = 'ol';
		else $type = '';
		
		//Eventuel id ou class au ul
		$liste[3] = split("::",$liste[3]);
		$id_class = '';
		if(isset($liste[3][1])) {
			if(preg_match('#^(class|id)\s*:(.*)$#i',trim($liste[3][1]),$id_class)) {
				$id_class = ' '.$id_class[1].'="'.trim($id_class[2]).'"';
			}
			else $id_class = ' id="'.trim($liste[3][1]).'"';
		}
		
		$changements = $niveau-$wiki2html_lastniveau;
		
		if($changements > 1) echo '<p>Syntaxe Wiki Ereur - Listes : Vous ne devez pas dans la hierarchie des listes monter de deux niveaux d\'un coups.</p>';
		
		if($changements <= 0 && $lastpuces > 0) $close['last']['li'] = true;
		else $close['last']['li'] = false;
		
		if($changements > 0) $open['xl'] = true;
		else $open['xl'] = false;
		
		if($puces > 0) $open['li'] = true;
		else $open['li'] = false;
		
		$close['nb']['all'] = $changements*(-1);
		
		$returned = '';
		$returned2 = '';
		$closes = '';
		
		if($close['last']['li']) {
			$returned.= '</li>';
		}
		if($open['xl']) {
			$returned.= wiki2html_tab($tab['xl']).$liste[1].'<'.$type.$id_class.'>';
		}
		for($i=0;$i<$close['nb']['all'];$i++) {
			$closes.= "\n".wiki2html_tab($tab['last']['xl']-($i*2)).$liste[1].'</'.$wiki2html_type[$wiki2html_lastniveau-$i].'>';
			if(!($i==($close['nb']['all']-1) && $puces <= 0)) {
				$closes.= "\n".wiki2html_tab($tab['last']['li']-(($i+1)*2)).$liste[1].'</li>';
			}
		}
		if($open['li']) {
			$returned2.= "\n".wiki2html_tab($tab['li']).$liste[1].'<li>'.trim($liste[3][0]);
		}
		
		$wiki2html_lastniveau = $niveau;
		$wiki2html_type[$wiki2html_lastniveau] = $type;
		if(!($changements == 0 && $puces < 1)) return $returned.$closes.$returned2;
		else return $return[0];
		
	}
	else return $return[0];
	
}

//Fonction finale
function wiki2html ($chaine) {
	//#### LES COMMENTAIRES
	// Block
	$chaine = preg_replace('#^\s*(?Us)/\*.*\*/#m','',$chaine);
	// ligne (pour ne pas que les // soient gènants, le commentaire n'est valable qu'en début de ligne).
	$chaine = preg_replace('#^\s*//.*$#m','',$chaine);
	$chaine = preg_replace_callback('#^(\s*)(.*)$#m','wiki2html_p',$chaine);
	$chaine = preg_replace_callback('#^(\s*)(=+)(!?)(.+)\2\s*$#m','wiki2html_titre',$chaine);
	$chaine = preg_replace_callback('#^(\s*)-{4,}\s*$#m','wiki2html_hr',$chaine);
	$chaine = preg_replace_callback('#\{([^}]+)\}#','wiki2html_image',$chaine);
	$chaine = preg_replace_callback('#\[([^]]+)\](.*)\[/\]#U','wiki2html_lien',$chaine);
	$chaine = preg_replace_callback('#\'\'\'(.*)\'\'\'#U','wiki2html_strong',$chaine);
	$chaine = preg_replace_callback('#\'\'(.*)\'\'#U','wiki2html_em',$chaine);
	$chaine = preg_replace_callback('#^(\s*)\(:\s*\n(?sU)(.*)(?-Us)\n\s*:\)\s*$#m','wiki2html_dlist',$chaine);
	$chaine = preg_replace_callback('#^(?-U)(\s*)(?U)(.*)"""\s*\n(?s)(.*)(?-s)\n\s*"""\s*$#Um','wiki2html_blockquote',$chaine);
	$chaine = preg_replace_callback('#""(.*)""#U','wiki2html_q',$chaine);
	$chaine = preg_replace_callback('#^(.*)$#m','wiki2html_listes',$chaine);
	$chaine = preg_replace('#\n</li>#','</li>',$chaine);
	$chaine = trim($chaine);
	
	return $chaine;
}

//############################# fin interpréteur #############################
//############################################################################
//############################################################################
//############################################################################

$wiki = "
= Titre du document :: haut =
  == Titre 1 ==
    
    Paragraphe du chapitre 1 avec un mot en ''emphrase''. Bblabla blabal blabla blaabl bla. Blablate bl ba badeba la bla bblabla bl. Blabla bla bla bla bblabla ba.
    
    === Sous-titre 1 ===
      
      Voici une arborescence de titres... Histoire de ne pas écrire pour rien, je vais illustrer la forte emphrase, voici donc '''un bout de texte en forte emphrase'''.
      
    === Sous-titre 2 ===
      
      Bon ... Voilà quoi.
      
  == Titre 2 ==
    
    ===! Sous-titre caché ===
      
    {http://lesfilsdegaia.free.fr/galerie/Bertrand/mini/250.jpg :: Le tabac, c'est mal. :: <}
    Voilà à quoi ressemblerra l'intégration d'une image dans un document. Blabla bla bla bla bblabla blabal blabla bla bla bla blabla blabl bla. Blablate bl ba badeba.
    
    Il peut y avoir plusieurs paragraphes qui la contournent, bla bblabla blabal blabla blaabl bla. Blablate bl ba badeba la bla bblabla bl. Blabla bla bla bla bblabla ba.
    
    === Sous-titre ===
    
    Tout comme il peut y avoir des titres, des listes, ou n'importe quel élément. Une fois la hauteur de l'image dépassée, le texte reprend toute la largeur possible.
    
    Un petit hr pour la démo (mais très mal placé...) : 
  
  ---------
  
  // Commentaire invisible
  /*
  Commentaire
  en block
  invisible
  */
  
  <!-- Commentaire visible (dans le code source) -->
  
  == Titre 3 ==
    
    === Citation ===
      
      [ http://openweb.eu.org/ :: Openweb Group, pour les Standards du Web. ] Openweb [/] :: [ http://openweb.eu.org/articles/xhtml_une_heure/ ] Apprendre l'Xhtml en une heure [/] \"\"\"

Il arrive que certains mots aient besoin d'être mis en évidence. On appelle cela l'emphase. Pour mettre un ou plusieurs mots en emphase, on utilise l'élément <code>em</code>. Généralement, cela aura pour effet de mettre le texte en question en italique. Sur un navigateur textuel comme Lynx, cela soulignera le mot.

Pour mettre un texte en forte emphase, on utilisera l'élément <code>strong</code>. Cela aura pour effet de mettre le texte en gras.

\"\"\"

    === Listes ===
      
      Voici 2 listes comprenants des éléments numérotés ou non :
      
	* élément1
	* élément2
	** sous-élément1
	** sous-élément2
	** sous-élément3
	*** sous-sous-élément1 :: class:sousousul
	*** sous-sous-élément2
	** sous-élément4
	**# sous-sous-élément numéroté1
	**# sous-sous-élément numéroté2
	**# sous-sous-élément numéroté3
	* élément3
	
	
	# élément numéroté1 :: ul2
	# élément néméroté2
	#* sous-élément5
	#* sous-élément6
	# élément néméroté3
	## sous-élément numéroté1
	## sous-élément numéroté2
	
      ==== Listes de définitions ====

	(:
	: Noria
	Machine à élever l'eau, constituée principalement d'une roue ou d'une chaine sans fin à laquel est fixés des godets.
	;;
	: Dimère
	Composé résultat de la combinaison (dimérisation) de deux molécules semblables.
	N<sub>2</sub>O<sub>4</sub> est le dimère de NO<sub>2</sub>.
	;;
	:) 
        
[ #haut ] Retour en début de document [/].

";

//##### RECUPERATION DU FORMULAIRE #####

if(isset($_POST['texte'])) {
	$wiki = "\n".$_POST['texte'];
	$wiki = stripslashes($wiki);
}
//######################################

$html = wiki2html($wiki);

$nblignes['wiki'] = nblignes($wiki);
$nblignes['html'] = nblignes($html);



?>



<!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">
  <head>
    <title>
      Analyseur syntaxique de WIKI
    </title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<style type="text/css">
/*<![CDATA[*/
    /*Propiétés sur la page même*/
    body {
        background-color: #fbfcfb;
        font-size: 1.3em;
        text-align: justify;
    }
    .html, .html2, .wiki  {
        width: 95%;
        background-color: white;
        border: 1px #aaa solid;
    }
    .html {
        height: <?echo $nblignes['html']+1?>em;
    }
    .wiki {
        height: <?echo $nblignes['wiki']?>em;
    }
   
    /*Propiétés sur le code généré*/
    .left {
        float: left;
    }
    .right {
        float: right;
    }
    .hidden {
        display: none;
    }
    fieldset {
        border: none;
        padding: 0;
    }
/*]]>*/
</style>
  </head>
<body>
<?php

//##### FORMULAIRE DE MODIFICATION #####
?>
<h1>Syntaxe wiki : page de test et d'entrainement.</h1>
<h2>Syntaxe wiki : Modification</h2>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
<fieldset>
<textarea name="texte" id="texte" class="wiki" rows="50" cols=""><?php echo(htmlentities($wiki)); ?></textarea>
<input type="submit" value="Tester" />
</fieldset>
</form>
<?php
//#####################################




//############ AFFICHAGE ##############
?>
<h2>Syntaxe html : Code</h2>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<fieldset>
<textarea class="html" rows="50" cols=""><?php echo(htmlentities($html)); ?></textarea>
</fieldset>
</form>
<h2>Syntaxe html : Rendu final</h2>
<div class="html2"><?php echo($html); ?><br /></div>
<?php
//#####################################
?>
</body>
</html>
J'ai essayé de commenter un maximum mon code, mais si vous ne comprennez pas quelque chose, n'hésitez pas à demander.

Voilà, j'attends vos commentaires et suggestions.

Merci de votre attention.

ps : Il est installé à cette adresse : http://lesfilsdegaia.free.fr/hx5/wikitest.php


EDIT 29/04/05 : Amélioration de la page d'interprétation par Cyrano.

EDIT 05/09/05 : http://www.phpfrance.com/forums/voir_re ... .php#57698

Posté : 29 août 2005, 16:17
par Eolymhn
Vous pouvez proposer des améliorations ou simplement en suggerrer, si vous ne vous sentez pas capable de le faire ...

Posté : 29 août 2005, 16:47
par Xenon_54
Bonjour,

J'aime bien!

Sujet à bookmarker pour référence future.

Posté : 29 août 2005, 20:44
par Eolymhn
Je vais personnellement l'utiliser pour un pseudo moteur wiki où seuls certains membres pourront faire la modification des pages ; et également pour la rédaction des posts du forum que je devrais commencer plutot que raconter ma vie...

Il serrait bien de tourner le code en une fonction dans laquel ont fait passer toutes les chaines que l'on veut, elle serrait ainsi utilisable dans beaucoups des projets demandant à l'internaute alpha de rédiger (moteurs wiki, forums voir même blogs !).

Il faudrait également rédiger un manuel d'expliquation de la syntaxe, accessible à tout le monde : je le vois bien en trois niveaux, trois parties. La première expliquerrait les fonctions essentiels de rédaction sans rentrer dans les détailles, la seconde approfondirrait chacun de ces points et aborderrait certains plus pointus. La dernière serrait "l'experte", pour des fonctions encore inexistantes ; ). Je ne suis personnellement pas très bon pour ce genre de rédaction ...

Il serrait également utile de faire un couple de balises qui encadrerrait les morceaux de la chaine que l'utilisateur ne veut pas interpréter ...

Voilà, j'ai suggerré des idées, à vous d'en juguer.

Posté : 29 août 2005, 20:58
par Xenon_54
Bonjour,

Et pourquoi ne pas adapter en programmation orientée objet PHP5?

Posté : 29 août 2005, 21:07
par Eolymhn
Je veux bien, mais quel interret ça aurrait ? Qu'est ce que ça aporterra de plus au code ?

Je sais personnellement faire de la programmation orientée objet, mais ça n'est pas le cas de tout le monde ... Il est préférable que ça reste non seulement accessible au plus d'utilisateurs possible, mais également au plus de programmateurs possible (qui intègrerons le code dans leurs sites ...).

Posté : 29 août 2005, 21:37
par Xenon_54
Bonjour,

Personnellement, la programmation orientée objet m'apporte plusieurs avantages.

J'ai la certitude d'avoir la même interface peu importe les changements faits aux traitements internes. Ceci implique évidemment que l'auteur de la classe s'impose une discipline de fer en ne changeant pas les noms de méthodes à chaque mise à jour. Ainsi mes scripts ne seront pas à refaire à chaque mise à jour.

Cela permet de concentrer toutes les fonctions, variables et constantes dans un même espace. Je peux donc définir une autre fonction lien() (par exemple) sans empiéter sur celle de la classe wiki.

De plus, j'ai la liberté d'étendre les possibilités de cette même classe en ajoutant des traitements qui n'étaient pas présent dans celle d'origine. Donc si je désire ajouter un style particulier à tous les liens externes à mon site, je peux étendre la méthode lien(), ajouter cette possibilité et ce, sans avoir à modifier le code original. Tout cela me préserve d'avoir à tout refaire les modifications lors de mise à jour de la classe d'origine.

Tous cela permettra une plus grande modularité du code; la classe pouvant être repris pour la gestion des articles, des actualités et plusieurs autres modules connexes. Ainsi, il n'y aura plus de fonctions codées "à la hard" que l'on doit modifier pour satisfaire nos besoins et cela permettra de partager la classe très facilement sans avoir à retirer toutes nos "touches persos" et autres intégrations "hard".

Mais comme mentionné précédemment, le développeur (et son équipe) se doit d'avoir une discipline de fer afin d'assurer la constance compatibilité entre les diverses mises à jour et une même interface (ce qui est le plus important).

Posté : 29 août 2005, 22:26
par Eolymhn
PHP <--> Xenon_54 ? bref

Si tu sais nous(me?) faire une petit démo (en intégrant ce code)... ça serrait sympa.

Merci pour ta participation.

Posté : 29 août 2005, 22:29
par Xenon_54
Bonjour,

Oui, PHP = Xenon_54. Le changement a été effectué suite à la demande des administrateurs qui ne semblaient pas trop apprécier le fait que le blasphème en utilisant le nom de PHP.

Concernant l'intégration, tu veux que je fasse une classe avec le code fourni? Donc faire le boulot à ta place? Je ne fais qu'apporter les idées et non le résultat.

Posté : 29 août 2005, 22:37
par naholyr
Le changement a été effectué suite à la demande des administrateurs qui ne semblaient pas trop apprécier le fait que le blasphème en utilisant le nom de PHP.
:agenouille: :agenouille: :-({|=
Concernant l'intégration, tu veux que je fasse une classe avec le code fourni? Donc faire le boulot à ta place? Je ne fais qu'apporter les idées et non le résultat.
Espèce d'ingénieur :langue:

Posté : 29 août 2005, 22:42
par Eolymhn
Ca n'est plus mon boulot, j'ai personnellement rempli ma tache en créant un interpréteur adapté au projet sur lequel je travaille.

Etant rendu open-source, ce code apartient à la communauté, et c'est à elle d'y aporter des améliorations pour en faire comme tu le disais "une référence".

Du moin, c'est ainsi que je vois les choses ...

Pour ma part, je veux bien participer à son amélioration, ainsi que mettre à jour le code...

Posté : 29 août 2005, 22:52
par Xenon_54
Bonjour,

Dans ce cas, je suis alors disponible (à temps perdu) pour adapter le tout en POO PHP5.

Donc bientôt sur un forum près de chez vous...

Posté : 29 août 2005, 22:55
par Eolymhn
Merci pour ta contribution :merci:.

Posté : 05 sept. 2005, 20:48
par Eolymhn
Bonjour,

Quelques Améliorations :

* Au niveau de la page d'interprétation, j'ai séparé les traitements php de l'affichage html, ce qui la rend un peu plus abordable.
* Coté interpréteur, j'en ai fait une simple fonction à un argument (la chaine à interpréter), et j'ai modifié les noms des fonctions utilisées en des noms beaucoups moin susceptibles de poser le problème de la redéfinition... (en attendant une version orienté objet ...).
* J'ai également ajouté la possibilité de commentaire la syntaxe (uniquement utile lorsque le document est enregistré en version non-interprétée (puisque les commentaires disparraissent à l'interprétation)(mais les commentaires version html sont toujours valables ...)).

Voilà, prochaine amélioration envisagée : le balisage de non-interprétation partiel...