Announcement

Collapse
No announcement yet.

html-code-überprüfung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • html-code-überprüfung

    hi,

    für meinen marlem-edit (programmiereditor) waäere noch eine html-überprüfung geschickt!
    zum beispiel ob alle tags geschlossen werden und wenn nicht, dass er anzeigt wo!

    wie programmiert man sowas?

    gruß

    markus
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    nur nicht soviel lösungsvorschläge gleichzeitig

    habe es so gemacht:

    <pre>
    //überprüft die syntax einer html-datei
    procedure TForm1.htmlcheck(var text : string);
    var
    htmlzaehlen : array[1..14] of integer;
    htmlbefehle : array[1..14] of string;
    begrenzer,i,posb,posbe : integer;
    erg,text1 : string;
    begin
    begrenzer := 14;
    erg := ''; //ergebissatz
    text1 := text;
    //Initialisieren
    htmlbefehle[1] := '<HTML>';
    htmlbefehle[2] := '</HTML>';
    htmlbefehle[3] := '<BODY>';
    htmlbefehle[4] := '</BODY>';
    htmlbefehle[5] := '<HEAD>';
    htmlbefehle[6] := '</HEAD>';
    htmlbefehle[7] := '<TITLE>';
    htmlbefehle[8] := '</TITLE>';
    htmlbefehle[9] := '<b>';
    htmlbefehle[10] := '</b>';
    htmlbefehle[11] := '<u>';
    htmlbefehle[12] := '</u>';
    htmlbefehle[13] := '<i>';
    htmlbefehle[14] := '</i>';

    htmlzaehlen[1] := 0;
    htmlzaehlen[2] := 0;
    htmlzaehlen[3] := 0;
    htmlzaehlen[4] := 0;
    htmlzaehlen[5] := 0;
    htmlzaehlen[6] := 0;
    htmlzaehlen[7] := 0;
    htmlzaehlen[8] := 0;
    htmlzaehlen[9] := 0;
    htmlzaehlen[10] := 0;
    htmlzaehlen[11] := 0;
    htmlzaehlen[12] := 0;
    htmlzaehlen[13] := 0;
    htmlzaehlen[14] := 0;

    i := 1;
    posb := pos(lowercase(htmlbefehle[i]),lowercase(text1));
    posbe := pos(lowercase(htmlbefehle[i+1]),lowercase(text1));
    while i <= begrenzer do begin
    while (posb > 0) or (posbe > 0) do begin
    if posb > 0 then begin
    inc(htmlzaehlen[i]);
    text1 := Loeschestring(lowercase(text1),lowercase(htmlbefeh le[i]));
    end;
    if posbe > 0 then begin
    inc(htmlzaehlen[i+1]);
    text1 := Loeschestring(lowercase(text1),lowercase(htmlbefeh le[i+1]));
    end;
    posb := pos(lowercase(htmlbefehle[i]),lowercase(text1));
    posbe := pos(lowercase(htmlbefehle[i+1]),lowercase(text1));
    end;
    if htmlzaehlen[i] <> htmlzaehlen[i+1] then
    erg := erg + ' ' + 'Es gibt ' + inttostr(htmlzaehlen[i])+' mal das Tag ' + htmlbefehle[i]+' und '+ inttostr(htmlzaehlen[i+1])+' mal das Tag ' + htmlbefehle[i+1];
    i := i + 2;
    if i > begrenzer then break;
    text1 := text;
    posb := pos(lowercase(htmlbefehle[i]),lowercase(text1));
    posbe := pos(lowercase(htmlbefehle[i+1]),lowercase(text1));
    end;
    if erg = '' then erg := 'HTML-Datei ist in ordnung!';
    Showmessage(erg);

    end;
    </pre>

    aber wie kann ich anzeigen lassen, wo der tag fehlt?

    gruß

    marku
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

    Comment


    • #3
      Hallo Markus,<br>ich weiss zwar nicht wie man es anzeigt wo das Tag fehlt, dafür habe ich aber einen anderen Tip für Dich.<br>Die Initialisierung der Array's wäre so eleganter:<br>
      <pre>
      Type
      Thtmlzaehlen = array[1..14] of integer;
      Thtmlbefehle = array[1..14] of string;
      ...
      htmlzaehlen : Thtmlzaehlen ;
      htmlbefehle : Thtmlbefehle ;
      ...
      FillChar(htmlzaehlen,SizeOf(Thtmlzaehlen),0);
      FillChar(htmlbefehle,SizeOf(Thtmlbefehle),0);
      ...
      </pre&gt

      Comment


      • #4
        hi jens,

        danke für den tip! dann sind es aber globale variablen oder?

        gruß

        marku
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment


        • #5
          Moin Markus,<br>
          <br>
          wenn Du es wirklich sicher machen willst, musst Du wohl oder übel einen kompletten Syntaxcheck durchführen.<br>
          Im groben gesagt, müsstest Du die ganze Datei Stück für Stück durchgehen, und anhand des Gefunden entscheiden, was als nächstes kommen darf. Kommt dabei etwas unerwartetes (nicht ganz untypische Meldung von Delphi: ')' erwartet, aber ';' gefunden) hast Du eine Fehlerstelle.<br>
          <br>
          Ciao<br>
          Chri

          Comment


          • #6
            hi chris,

            bei mir im forum meinen sie mit einem stack geht das!

            gruß

            marku
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment


            • #7
              Hi Markus,<br>
              wie wars mit dem zaehlen von &gt; und &lt;s? In HTML koennen diese Zeichen nicht auftreten - also zaehle sie, und zu jedem &lt; muss es danach auch ein &gt; geben. <br>
              Ansonsten ist was schief gelaufen. Das kannst Du super mit nem Pointer erledigen. Wenn Dir das nicht recht, so kannst Du hoechstens noch die Schluesselworter von HTML - Tags ueberpruefen.<p>

              CU Chri

              Comment


              • #8
                Hallo Markus,<br>
                es müssen keine globalen Variablen sein. Wie kommst Du darauf?<br>Das einzige, was hier "global" ist, ist die Typendeklaration für die Array-Typen

                Comment


                • #9
                  @chris
                  ich teste mal das mit dem stack! hört sich gut an!

                  @jens
                  schlecht ausgerdrückt von mir! ich meinte auch die typendeklaration!

                  gruß

                  marku
                  Herzliche Grüße

                  Markus Lemcke
                  barrierefreies Webdesign

                  Comment

                  Working...
                  X