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