コード例 #1
0
 public static function setCssSelectors($content_dom)
 {
     global $selettori;
     global $attributo_selettore;
     global $selettori_appoggio;
     global $array_css;
     global $flag_selettori_appoggio;
     $array_css = array();
     //echo("<p>entro in cssselector</p>");
     //echo("<p>isset selettori_appoggio=".isset ($selettori_appoggio)."</p>");
     //print_r($selettori_appoggio);
     if (isset($flag_selettori_appoggio)) {
         //return ($selettori_appoggio);
         return;
     } else {
         $flag_selettori_appoggio = true;
     }
     $spazio = "{_}";
     //$selettori_appoggio =array();
     // parte in prova
     $csslist = BasicChecks::get_style_external($content_dom);
     $cssinternal = BasicChecks::get_style_internal($content_dom);
     //echo("<p>Stampo la lista di stili</p>");
     //print_r($csslist);
     //print_r($cssinternal);
     // MB I create the data structure containing the css information
     //MB creo la struttura dati contenente i dati dei css
     BasicChecks::prepare_css_arrays($csslist, $cssinternal);
     //fine parte in prova - end part in test
     $size_of_selettori = sizeof($selettori);
     for ($idcss = 0; $idcss < $size_of_selettori; $idcss++) {
         //$selettori_appoggio[$idcss] =array();
         for ($i = 0; $i < count($selettori[$idcss]); $i++) {
             $sel_string = str_ireplace('{', '', $selettori[$idcss][$i]);
             //rimuovo "{"
             $sel_string = str_ireplace('>', ' > ', $sel_string);
             // metto gli spazi tra i ">"
             $sel_string = str_ireplace('+', ' + ', $sel_string);
             // metto gli spazi tra i "+"
             // use the $spazio symbol to indicate that  an id or class is preceded by a space
             // in fact "p.nome_classe" is different from "p .nome_classe"
             //uso il simbolo $spazio e per indicare che un id o una classe e' preceduta da uno spazio
             //infatti "p.nome_classe" è diverso da "p .nome_classe"
             $sel_string = str_ireplace(' .', ' ' . $spazio . '.', $sel_string);
             //put a space before - metto uno $spazio prima di "."
             $sel_string = str_ireplace(' #', ' ' . $spazio . '#', $sel_string);
             // metto uno $spazio prima di "#"
             $sel_string = str_ireplace('.', ' .', $sel_string);
             // put a space before -  metto uno spazio prima di "."
             $sel_string = str_ireplace('#', ' #', $sel_string);
             // metto uno spazio prima di "#"
             //echo ("<p>1 sel_string =".$sel_string."</p>");
             while (stripos($sel_string, '  ') !== false) {
                 $sel_string = str_ireplace('  ', ' ', $sel_string);
                 //echo ("<p>sel_string =".$sel_string."</p>");
             }
             //rimuovo i {_} ridondanti
             $sel_string = str_ireplace('> {_}', '>', $sel_string);
             //$selettori_array = split ( ',', $sel_string );  // create an array of switches that are separated by ", "
             //creo un array dei selettori che sono separati da ","
             $selettori_array = explode(',', $sel_string);
             // create an array of switches that are separated by ", "
             foreach ($selettori_array as $sel) {
                 $sel = trim($sel);
                 //rimuovo eventuali $spazio all'inizio della stringa (remove spaces from beginning of strings )
                 $sel = preg_replace("/^" . $spazio . "/", "", $sel);
                 //rimuovo eventuali $spazio alla fine della stringa (remove spaces from ends of strings)
                 $sel = preg_replace("/" . $spazio . "\$/", "", $sel);
                 $sel = trim($sel);
                 //$selettore_array = split ( " ", $sel );
                 $selettore_array = explode(" ", $sel);
                 // in the final position of $selettore_array ????
                 //nell'ultima posizione di $selettore_array c'� il selettore piu' a dx prima di una "," o di "{"
                 $size_of_selettore = sizeof($selettore_array) - 1;
                 $last = $selettore_array[$size_of_selettore];
                 //ultimo elemento a dx, es: "div > p br" ---> br
                 $array_appoggio = array();
                 $array_appoggio["idcss"] = $idcss;
                 $array_appoggio["posizione"] = $i;
                 //"regole" contiene: $prorieta =>valore
                 $regole = $attributo_selettore[$idcss][$i];
                 if (sizeof($regole) > 0) {
                     $pos_prop = 0;
                     foreach ($regole as $regola) {
                         //print_r($array_appoggio);
                         $regola = trim($regola);
                         //$regola = split ( ":", $regola );
                         $regola = explode(":", $regola);
                         if (sizeof($regola == 2)) {
                             $proprieta = trim($regola[0]);
                             $valore = trim($regola[1]);
                             if (!isset($array_appoggio["regole"][$proprieta])) {
                                 $array_appoggio["regole"][$proprieta]["val"] = $valore;
                                 $array_appoggio["regole"][$proprieta]["pos"] = $pos_prop;
                             } elseif (stripos($array_appoggio["regole"][$proprieta]["val"], "!important") !== false) {
                                 if (stripos($valore, "!important") !== false) {
                                     $array_appoggio["regole"][$proprieta]["val"] = $valore;
                                 }
                                 $array_appoggio["regole"][$proprieta]["pos"] = $pos_prop;
                             } else {
                                 $array_appoggio["regole"][$proprieta]["val"] = $valore;
                                 $array_appoggio["regole"][$proprieta]["pos"] = $pos_prop;
                             }
                         }
                         $pos_prop++;
                     }
                 }
                 //memorizzo i "predecessori". es: il selettore =" div > p br", allora i predecessori di br (considero anche br stesso) sono br, p, > e div. li memorizzo da dx a sx
                 for ($j = $size_of_selettore, $k = 0; $j >= 0; $j--, $k++) {
                     $array_appoggio["prev"][$k] = $selettore_array[$j];
                 }
                 //if(isset($selettori_appoggio[$idcss][$last])) //ho gi inserito questo elemento (tag, id, class) almeno una volta
                 if (isset($selettori_appoggio[$last])) {
                     $posizione = sizeof($selettori_appoggio[$last]);
                     $selettori_appoggio[$last][$posizione] = $array_appoggio;
                 } else {
                     $selettori_appoggio[$last][0] = $array_appoggio;
                 }
             }
         }
     }
 }