unit ATSynEdit_Export_HTML; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, StrUtils, ATSynEdit, ATSynEdit_CanvasProc, ATStringProc_HtmlColor, LazUTF8Classes; procedure DoEditorExportToHTML(Ed: TATSynEdit; const AFilename, APageTitle, AFontName: string; AFontSize: integer; AWithNumbers: boolean; AColorBg, AColorNumbers: TColor); implementation procedure DoEditorExportToHTML(Ed: TATSynEdit; const AFilename, APageTitle, AFontName: string; AFontSize: integer; AWithNumbers: boolean; AColorBg, AColorNumbers: TColor); var L: TStringListUTF8; Parts: TATLineParts; PPart: ^TATLinePart; NColorFont: TColor; NColorAfter: TColor; NeedStyle: boolean; Str0, Str1: string; i, j: integer; begin NColorFont:= clBlack; FillChar(Parts, Sizeof(Parts), 0); if FileExists(AFilename) then DeleteFile(AFilename); L:= TStringListUTF8.Create; try L.Add(''); L.Add(''+sLineBreak+ ''+sLineBreak+ ' '+sLineBreak+ ' '+APageTitle+''+sLineBreak+ ' '+sLineBreak+ ''+sLineBreak+ ''); if AWithNumbers then begin L.Add(''+sLineBreak+''+sLineBreak+''+sLineBreak+'
'); L.Add('
'); //??? eol
      for i:= 0 to Ed.Strings.Count-1 do
        L.Add(IntToStr(i+1)+'  ');
      L.Add('
'); L.Add('
'); end; L.Add('
');

    for i:= 0 to Ed.Strings.Count-1 do
    begin
      Str0:= '';
      if not Ed.DoCalcLineHiliteEx(i, Parts, AColorBG, NColorAfter) then break;
      for j:= 0 to High(Parts) do
      begin
        PPart:= @Parts[j];
        if PPart^.Len=0 then Break;
        if PPart^.FontBold then Str0:= Str0+'';
        if PPart^.FontItalic then Str0:= Str0+'';
        if PPart^.FontStrikeOut then Str0:= Str0+'';

        NeedStyle:=
          (PPart^.ColorFont<>NColorFont) or
          (PPart^.ColorBG<>AColorBG);
        if NeedStyle then
          Str0:= Str0+'';

        Str1:= Utf8Encode(Copy(Ed.Strings.Lines[i], PPart^.Offset+1, PPart^.Len));
        Str1:= StringReplace(Str1, '<', '<', [rfReplaceAll]);
        Str1:= StringReplace(Str1, '>', '>', [rfReplaceAll]);

        Str0:= Str0+Str1;
        if NeedStyle then
          Str0:= Str0+'';

        if PPart^.FontStrikeOut then Str0:= Str0+'';
        if PPart^.FontItalic then Str0:= Str0+'';
        if PPart^.FontBold then Str0:= Str0+'';
      end;
      L.Add(Str0);
    end;

    L.Add('
'); if AWithNumbers then L.Add('
'); L.Add(''); L.Add(''); L.SaveToFile(AFilename); finally FreeAndNil(L); end; end; end.