Home » Tutorials » Sonstiges » rtf2html

rtf2html

Schritt 6

Nun wird wieder gemäß der in Reihenfolge festgelegten Reihenfolge (was für eine Sprachkonstruktion 😉 getestet:

for loop2:=0 to ReihenFolge.Count-1 do
      case Integer(ReihenFolge[loop2]) of

        1: if fsBold in Style then
           begin
             if not fett then
             begin
               s:=s+'<strong>';
               fett:=true;
               ReihenFolge.Move(loop2,0);
             end;
           end
           else begin
             if fett then
             begin
               s:=s+'</strong>';
               fett:=false;
               ReihenFolge.Move(loop2,ReihenFolge.Count-1);
             end;
           end;

Hier sehen wir am Beispiel „Fett“ bzw. „fsBold“ wie vorgegangen wird: Entweder es wird ein eingefügt oder ein , je nachdem, ob das neue Zeichen nun Fett ist oder nicht. Danach wird die Reihenfolge wieder geändert. Ist eine b-Tag geöffnet worden, wird dieser Eintrag an den Anfang der Liste gesetzt, damit er im nächsten Durchlauf u.U. auch wieder als erster geschlossen wird, wurde er geschlossen, ist also kein b-Tag mehr offen, können wir dieses Tag ganz an den Schluss schieben.
Die restlichen Tags werden genauso getestet, der Code folgt deshalb hier am Stück:

2: if fsItalic in Style then
           begin
             if not kursiv then
             begin
                s:=s+'<em>';
                kursiv:=true;
                ReihenFolge.Move(loop2,0);
             end;
           end
           else begin
             if kursiv then
             begin
               s:=s+'</em>';
               kursiv:=false;
               ReihenFolge.Move(loop2,ReihenFolge.Count-1);
             end;
           end;

        3: if fsUnderline in Style then
           begin
             if not us then
             begin
               s:=s+'<u>';
               us:=true;
               ReihenFolge.Move(loop2,0);
             end;
           end
           else begin
             if us then
             begin
               s:=s+'</u>';
               us:=false;
               ReihenFolge.Move(loop2,ReihenFolge.Count-1);
             end;
           end;

        4: if Color<>aktcolor then
           begin
             aktcolor:=color;
             s:=s+'</font><font size="'+IntToStr(aktsize)+'" color="#'+
             IntToHex(GetRValue(AktColor),2)+
             IntToHex(GetGValue(AktColor),2)+
             IntToHex(GetBValue(AktColor),2)+'">';
             ReihenFolge.Move(loop2,0);
           end;

        5: if CalculateSize(Size)<>aktSize then
           begin
             aktsize:=CalculateSize(size);
             s:=s+'</font><font size="'+IntToStr(aktsize)+'">';
             ReihenFolge.Move(loop2,0);
           end;

        6: if Source.Paragraph.Numbering =nsBullet then
           begin
             if not bullet then
             begin
               s:=s+'<li>';
               bullet:=true;
               ReihenFolge.Move(loop2,0);
             end;
             end
             else begin
               if bullet then
               begin
                 s:=s+'</li>';
                 bullet:=false;
                 ReihenFolge.Move(loop2,ReihenFolge.Count-1);
               end;
             end;

      end; // case
    end; // with selattributes do