Listing du fichier cmpdtd_inc.php
00001 <?php
00002 # (gH) -_- cmpdtd_inc.php ; TimeStamp (unix) : 15 Août 2012 vers 22:32
00003
00004 #############################################################################
00005
00006 function lesGrammaires() {
00007
00008 #############################################################################
00009
00010 $_tabGram = array() ;
00011 $_tabGram["XHTML_1.0_Transitional"] = "Dtd/xhtml1-transitional.dtd" ;
00012 $_tabGram["XHTML_1.0_Strict"] = "Dtd/xhtml1-strict.dtd" ;
00013 $_tabGram["XHTML_1.0_Frameset"] = "Dtd/xhtml1-frameset.dtd" ;
00014 $_tabGram["HTML5_(experimental)"] = "Dtd/html5-experimental.dtd" ;
00015
00016 return($_tabGram) ;
00017
00018 } # fin de fonction lesGrammaires
00019
00020 #############################################################################
00021
00022 function compareDtd($gram1="grammaire 1 non fournie",$gram2="grammaire 2 non fournie") {
00023
00024 #############################################################################
00025
00026 $titreGram = array() ;
00027 $titreGram["Dtd/xhtml1-transitional.dtd"] = " XHTML 1.0 Transitional " ;
00028 $titreGram["Dtd/xhtml1-strict.dtd"] = " XHTML 1.0 Strict " ;
00029 $titreGram["Dtd/xhtml1-frameset.dtd"] = " XHTML 1.0 Frameset " ;
00030 $titreGram["Dtd/html5-experimental.dtd"] = " HTML5 (experimental) " ;
00031
00032 $errGram = 0 ;
00033 for ($igram=1;$igram<=2;$igram++) {
00034 $gram = "gram$igram" ;
00035 if (isset($titreGram[$$gram])) {
00036 $tgr = "tgr$igram" ;
00037 $$tgr = $titreGram[$$gram] ;
00038 } else {
00039 $errGram++ ;
00040 h2(" Grammaire $$gram non reconnue.") ;
00041 } # fin si
00042 } ; # fin pour igram
00043
00044 if ($errGram>0) {
00045 return(-1) ;
00046 } # fin si
00047
00048 h1("Comparaison de grammaires au format DTD ") ;
00049
00050 h2("Grammaires DTD utilisées :") ;
00051
00052 blockquote() ;
00053 for ($igram=1;$igram<=2;$igram++) {
00054 $gram = "gram$igram" ;
00055 $tgr = "tgr$igram" ;
00056 p() ;
00057 echo href($$gram,$$tgr) ;
00058 finp() ;
00059 } ; # fin pour igram
00060 finblockquote() ;
00061
00062 if ($gram1==$gram2) {
00063 h2("Il s'agit de la même grammaire, aucune comparaison à effectuer.") ;
00064 blockquote() ;
00065 div("plusgros") ;
00066 p() ;
00067 echo "Par contre, vous pouvez analyser la grammaire en termes d'élements, d'attributs, d'entités " ;
00068 echo " à l'aide du lien suivant : " ;
00069 finp() ;
00070 p() ;
00071 nbsp(20) ;
00072 echo href("analysedtd.php?url=$gram1"," analyse de $tgr1 ","bouton_fin nou bleu_pastel") ;
00073 finp() ;
00074 pvide() ;
00075 findiv() ;
00076 finblockquote() ;
00077 return(-1) ;
00078 } ; # fin si
00079
00080 # ---------------------------------------------------------------------------
00081
00082 h2("Résultats de la comparaison :") ;
00083
00084 blockquote() ;
00085
00086 $nbe = 0 ; # nombre d'éléments
00087 $tdr = array() ; # tableau des résultats
00088
00089 $err = 0 ;
00090 for ($ific=1;$ific<=2;$ific++) {
00091 $gram = "gram$ific" ;
00092 $nomFic = $$gram ;
00093 $fh = @fopen($nomFic,"r") ;
00094 if (!$fh) {
00095 h2(" impossible d'ouvrir $nomFic") ;
00096 $err++ ;
00097 } ; # finsi
00098 } # fin pour $ific
00099
00100 if ($err>0) {
00101
00102 h3("Erreur sur fichier, abandon du programme.") ;
00103
00104 } else {
00105
00106 for ($ific=1;$ific<=2;$ific++) {
00107
00108 $gram = "gram$ific" ;
00109 $nomFic = $$gram ;
00110
00111 $txt = file_get_contents($nomFic) ;
00112
00113 # on passe en revue la variable txt
00114 # pour bien détecter les éléments, on essaie de mettre une fin
00115 # de ligne en cas de fin de balise
00116 # on "chope" alors toutes les balises, ouvrantes comme fermantes
00117 # en principe dans une DTD, après ! on a soit -- soit ELEMENT soit ATTLIST
00118 # il faut donc ensuite analyser le deuxième mot quand ce n'est pas --
00119
00120 $ntxt = str_replace("\n"," ",$txt) ;
00121 $ntxt = str_replace(">",">\n",$ntxt) ;
00122 $er_bof = "/<(.*)?>/" ; # balise ouvrante/fermante
00123 preg_match_all($er_bof,$ntxt,$tbof) ;
00124
00125 # our mieux comprendre la gestion des mots, mettre $modeDbg = 1 ;
00126
00127 $modeDbg= 0 ; # 0 en mode normal, 1 pour debug
00128
00129 if ($modeDbg==1) { pre() ; }
00130 foreach ($tbof[1] as $elt) {
00131
00132 if ($modeDbg==1) { print_r($elt) ; echo "\n" ; }
00133
00134 $tdm = preg_split("/\s+/",$elt) ; # tableau des mots trouvés
00135 $lpm = $tdm[0] ; # le premier mot
00136 if (isset($tdm[1])) {
00137 $ldm = $tdm[1] ; # le deuxième mot
00138 if (isset($tdm[2])) {
00139
00140 $ldm = utf8_decode($ldm) ;
00141
00142 if ($lpm=="!ELEMENT") {
00143 $nbe++ ;
00144 if (!isset($tdr[$ldm])) {
00145 $tdr[$ldm] = 0 ; # initialisation
00146 } ; # fin si
00147 $tdr[$ldm] += $ific ; # donc 1 pour trans, 2 pour strict, 3 si commun
00148 } # fin si geston lpm
00149
00150 } # fin si sur le mot 2 existe
00151 } # fin si sur le mot 1 existe
00152
00153 } ; # fin pourchaque elt
00154
00155 if ($modeDbg==1) { finpre() ; }
00156
00157 # il ne reste plus qu'à trier les éléments et les entités par ordre alphabétique
00158
00159 ksort($tdr) ;
00160
00161 } # fin pour $ific
00162
00163 $nbtr = 0;
00164 $nbst = 0;
00165 $nbcom = 0;
00166 foreach ($tdr as $elt=>$cnt) {
00167 if ($cnt==1) { $nbtr++ ; } ;
00168 if ($cnt==2) { $nbst++ ; } ;
00169 if ($cnt==3) { $nbcom++ ; } ;
00170 } ; # fin pourchaque elt
00171
00172 p() ;
00173 echo "$nbe élements vus en tout, donc $nbcom communs aux deux grammaires, " ;
00174 br() ;
00175 echo "$nbtr spécifiques à $tgr1 et $nbst spécifiques à $tgr2. " ;
00176 finp() ;
00177
00178 afficheTableau($tdr,3,"élements communs",$nbcom) ;
00179 afficheTableau($tdr,1,"éléments spécifiques à $tgr1",$nbtr) ;
00180 afficheTableau($tdr,2,"éléments spécifiques à $tgr2",$nbst) ;
00181
00182 h2("Analyse (éléments, attributs,entités) de chaque grammaire :") ;
00183
00184 blockquote() ;
00185 p() ;
00186 echo href("analysedtd.php?url=$gram1"," analyse de $tgr1 ","bouton_fin nou bleu_pastel") ;
00187 nbsp(20) ;
00188 echo href("analysedtd.php?url=$gram2"," analyse de $tgr2 ","bouton_fin nou bleu_pastel") ;
00189 finp() ;
00190 finblockquote() ;
00191
00192 } # fin si
00193
00194 finblockquote() ;
00195
00196 } # fin de fonction compareDtd
00197
00198 #############################################################################
00199
00200 function afficheTableau($tabElt,$valCode,$titre,$nbe) {
00201
00202 #############################################################################
00203
00204 h2("Tableau des $titre") ;
00205
00206 blockquote() ;
00207
00208 if ($nbe==0) {
00209 h3("aucun élément à afficher.") ;
00210 } else {
00211
00212 table(1,15,"collapse") ;
00213 tr() ;
00214 th("C","jaune_pastel") ;
00215 echo " Numéro " ;
00216 finth() ;
00217 th("C","jaune_pastel") ;
00218 echo " Elément " ;
00219 finth() ;
00220 fintr() ;
00221
00222 $numElt = 0 ;
00223 foreach ($tabElt as $cle=>$valeur) {
00224 if ($valeur==$valCode) {
00225 $numElt++ ;
00226 tr() ;
00227 td("R") ;
00228 echo s_span(" ".$numElt." ","gvert") ;
00229 fintd() ;
00230 td() ;
00231 $clef = preg_replace("/</","<",$cle) ;
00232 $clef = preg_replace("/>/",">",$clef) ;
00233 echo s_span($clef,"gbleu") ;
00234 fintd() ;
00235 fintr() ;
00236 } ; # fin si
00237 } ; # fin pourchaque
00238
00239 fintable() ;
00240
00241 } # fin si
00242
00243 finblockquote() ;
00244
00245 } # fin de fonction afficheTableau
00246
00247 #############################################################################
00248
00249 ?>
Retour à la page principale de (gH)