philipp: Parser für css-Dateien

Hallo Ihr!

Ich habe versucht mir einen Parser für css-Dateien zu scheiben. Mein Ziel war es, dass ich die URL eines CSS eingebe und an das PHP schicke. Dieses holt dann mit fopen("$url", "r") das File und sucht alle Selektoren (wie H1, font.klein, etc..) herraus. Das Zweite ist mir aber leider nicht gelungen ...

Kann mir einer Helfen?

Danke Philipp

  1. Hoi

    Ich habe versucht mir einen Parser für css-Dateien zu scheiben. Mein Ziel war es, dass ich die URL eines CSS eingebe und an das PHP schicke. Dieses holt dann mit fopen("$url", "r") das File und sucht alle Selektoren (wie H1, font.klein, etc..) herraus. Das Zweite ist mir aber leider nicht gelungen ...

    $ar = file($url);
    $ps = "";
    $selektoren = "";
    $as = "";
    for($i=0; $<count($ar); $i++)
    { $ps .= $ar[$i];
      if(strstr($ps, "{") && strstr($ps, "}") && substr_count($ps, "{")==substr_count($ps, "}")
      { $ar2 = explode("}", $ps);
        for($j=0; $j<count($ar2); $j++)
        { if(strstr($ar2[$j], "{")
          { $ar3 = explode("{", $ar2[$j]);
            $selektoren[$as] = trim($ar3[0]);
            $ar3++;
          }
        }
      }
    }

    Jetzt mußt Du nur noch rausfinden, wie Du Kommentare entfernst und Programmierfehler in Style-Sheets abfängst ...

    Ciao,

    Harry

    1. Ups ...

      da hab ich doch glatt eine Zeile und ein paar Klammern vergessen :-(
       (tja ... erst Korrekturlesen und dann schicken, net andersrum)

      $ar = file($url);
      $ps = "";
      $selektoren = "";
      $as = "";
      for($i=0; $<count($ar); $i++)
      { $ps .= $ar[$i];
        if(strstr($ps, "{") && strstr($ps, "}") && substr_count($ps, "{")==substr_count($ps, "}")

      // Hier gehört natürlich ganz hinten auch noch eine Klammer hin:
           if(strstr($ps, "{") && strstr($ps, "}") && substr_count($ps, "{")==substr_count($ps, "}"))

      { $ar2 = explode("}", $ps);
          for($j=0; $j<count($ar2); $j++)
          { if(strstr($ar2[$j], "{")

      // muß heißen:
               if(strstr($ar2[$j], "{"))

      { $ar3 = explode("{", $ar2[$j]);
              $selektoren[$as] = trim($ar3[0]);
              $ar3++;
            }
          }

      // Hier fehlt
           $ps = "";

      }
      }

      Das Ergebnis steht übrigens im Array $selektoren.

      Harry

      1. hi!

        schonmal vielen dank!

        aber es gibt ein problem: http://cologne1.center-tag.de/style.php3

        $ar = file($url);
        $ps = "";
        $selektoren = "";
        $as = "";

        ZEILE 13: for($i=0; $<count($ar); $i++)

        { $ps .= $ar[$i];
          if(strstr($ps, "{") && strstr($ps, "}") && substr_count($ps, "{")==substr_count($ps, "}")

        // Hier gehört natürlich ganz hinten auch noch eine Klammer hin:
             if(strstr($ps, "{") && strstr($ps, "}") && substr_count($ps, "{")==substr_count($ps, "}"))

        { $ar2 = explode("}", $ps);
            for($j=0; $j<count($ar2); $j++)
            { if(strstr($ar2[$j], "{")

        // muß heißen:
                 if(strstr($ar2[$j], "{"))

        { $ar3 = explode("{", $ar2[$j]);
                $selektoren[$as] = trim($ar3[0]);
                $ar3++;
              }
            }

        // Hier fehlt
             $ps = "";

        }
        }

        Noch ne andere Frage: wie würdest du eine ausgabeliste machen?

        danke und gruss philipp

        1. hoi

          schonmal vielen dank!

          aber es gibt ein problem: http://cologne1.center-tag.de/style.php3

          ZEILE 13: for($i=0; $<count($ar); $i++)

          ^^^ Da hat sich ein "i" vom Acker gemacht: $i<

          Noch ne andere Frage: wie würdest du eine ausgabeliste machen?

          Schön in 'ner Tabelle :-)

          Ciao,

          Harry

          1. OK!
            Jetzt kommt zumindest kein Fehler mehr ;)

            Noch ne andere Frage: wie würdest du eine ausgabeliste machen?

            Schön in 'ner Tabelle :-)

            Hmmm ja Tabelle, aber du musst wissen ich habe mich noich nie mit array beschäftig!
            wie mache ich denn für jeden sich im array befindenden selektor eine neue zeile usw ... ?!

            *mirpeinlichsei*

            danke philipp

            1. Hoi !

              Noch ne andere Frage: wie würdest du eine ausgabeliste machen?

              Schön in 'ner Tabelle :-)

              Hmmm ja Tabelle, aber du musst wissen ich habe mich noich nie mit array beschäftig!
              wie mache ich denn für jeden sich im array befindenden selektor eine neue zeile usw ... ?!

              Tststs ...

              *mirpeinlichsei*

              Zurecht ;-) Das steht in den ersten drei Seiten der PHP-Anleitung ...

              for($i=0; $i<count($selektoren); $i++)
               echo "<tr><td>".$selektoren[$i]."</td></tr>";

              Ciao,

              Harry

              1. hi du!

                es geht aber leider immer noch nicht, bzw. findeste er nix:

                <?
                if ($url) {
                 $ar = file($url);
                 $ps = "";
                 $selektoren = "";
                 $as = "";
                 for($i=0; $i<count($ar); $i++)
                 { $ps .= $ar[$i];
                     if(strstr($ps, "{") && strstr($ps, "}") && substr_count($ps, "{")==substr_count($ps, "}"))

                { $ar2 = explode("}", $ps);
                     for($j=0; $j<count($ar2); $j++)
                     {
                         if(strstr($ar2[$j], "{"))

                { $ar3 = explode("{", $ar2[$j]);
                         $selektoren[$as] = trim($ar3[0]);
                         $ar3++;
                       }
                     }

                $ps = "";

                }
                 }
                 for($i=0; $i<count($selektoren); $i++) {
                 echo "<b>".$selektoren[$i]."</b><br>"; }

                }

                ?>

                online unter [http://cologne1.center-tag.de/style.php3]

                woran kann es liegen? gruss philipp

                1. Hoi

                  es geht aber leider immer noch nicht, bzw. findeste er nix:

                  <?
                  if ($url) {
                  $ar = file($url);
                  $ps = "";
                  $selektoren = "";
                  $as = "";

                  $as = 0;

                  ... ist besser (und richtig)

                  for($i=0; $i<count($ar); $i++)
                  { $ps .= $ar[$i];
                       if(strstr($ps, "{") && strstr($ps, "}") && substr_count($ps, "{")==substr_count($ps, "}"))

                  { $ar2 = explode("}", $ps);
                       for($j=0; $j<count($ar2); $j++)
                       {
                           if(strstr($ar2[$j], "{"))

                  { $ar3 = explode("{", $ar2[$j]);
                           $selektoren[$as] = trim($ar3[0]);
                           $ar3++;

                  Und das muß freilich ...

                  $as++;

                  ... heißen, sonst gibt's keinen Sinn.

                  }
                       }

                  $ps = "";

                  }
                  }
                  for($i=0; $i<count($selektoren); $i++) {
                  echo "<b>".$selektoren[$i]."</b><br>"; }

                  }

                  ?>

                  Sobald ich wieder daheim bin werd ich's mal gscheid ausprobieren, dann kann ich Dir auch sagen woran's liegt :-)

                  Ciao,

                  Harry

                  1. hhuhu!

                    höhö jetzt geht es auch, habe nur die beiden änderungen gemacht!

                    DANKE!!!!
                    philipp