');
+ Buffer.AddNewLine;
+
+ I := 0;
+ while (I < Length(Columns)) or not RenderColumns do
+ begin
+ if RenderColumns then
+ Index := Columns[I].Index
+ else
+ Index := NoColumn;
+
+ if not RenderColumns or (coVisible in Columns[I].Options) then
+ begin
+ // Call back the application to know about font customization.
+ Canvas.Font := Font;
+ FFontChanged := False;
+ DoPaintText(Run, Canvas, Index, ttNormal);
+
+ if Index = Header.MainColumn then
+ begin
+ // Create a cell for each indentation level.
+ if RenderColumns and not (coParentColor in Columns[I].Options) then
+ begin
+ for J := 1 to Level do
+ begin
+ Buffer.Add(' | ');
+ end;
+ end
+ else
+ begin
+ for J := 1 to Level do
+ if J = 1 then
+ begin
+ Buffer.Add(' | ');
+ end
+ else
+ Buffer.Add(' | ');
+ end;
+ end;
+
+ if FFontChanged then
+ begin
+ Buffer.Add(' bdLeftToRight then
+//b begin
+//b ChangeBidiModeAlignment(xAlignment);
+//b Buffer.Add(' dir="rtl"');
+//b end;
+
+ // Consider aligment.
+ case xAlignment of
+ taRightJustify:
+ Buffer.Add(' align=right');
+ taCenter:
+ Buffer.Add(' align=center');
+ else
+ Buffer.Add(' align=left');
+ end;
+ // Merge cells in the main column.
+ if (MaxLevel > 0) and (Index = Header.MainColumn) and (Level < MaxLevel) then
+ begin
+ Buffer.Add(' colspan="');
+ Buffer.Add(IntToStr(MaxLevel - Level + 1));
+ Buffer.Add('"');
+ end;
+ if RenderColumns and not (coParentColor in Columns[I].Options) then
+ begin
+ Buffer.Add(' bgcolor=');
+ WriteColorAsHex(Columns[I].Color);
+ end;
+ Buffer.Add('>');
+ xText := Self.Text[Run, Index];
+ if Length(xText) > 0 then
+ begin
+ xText := UTF16ToUTF8(xText);
+ Buffer.Add(xText);
+ end;
+ Buffer.Add(' | ');
+ end;
+
+ if not RenderColumns then
+ Break;
+ Inc(I);
+ end;
+ Run := GetNextNode(Run);
+ Buffer.Add('
');
+ Buffer.AddNewLine;
+ end;
+ Buffer.Add('