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; } } } } }