123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- {
- This file is part of the Free Component Library (FCL)
- Copyright (c) 1999-2000 by the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- unit wformat;
- {$ifdef fpc}
- {$mode objfpc}
- {$endif}
- Interface
- uses Classes,SysUtils;
- Type
- TlistType = (ltNumbered,ltOrdered,ltDefinition);
- TFormattingWriter = Class
- Private
- FStream : TStream;
- Public
- Constructor Create (AStream : TStream); Virtual;
- // To be overridden by descendents
- Function EscapeText (AText : String) : String; Virtual;
- // Quick dump.
- Procedure Dump(Const AText : String);
- Procedure DumpLn(Const AText : String);
- // Formatted write. Calls escapetext.
- Procedure Write(Const AText : String);
- Procedure WriteFmt(Const Fmt : String; Args : Array of const);
- // Document Structure
- Procedure DocumentStart(Const Title : String); Virtual;
- Procedure DocumentEnd; Virtual;
- // Header formatting
- Procedure Header(Alevel : Integer; Msg : String);
- Procedure HeaderStart(Alevel : Integer); virtual;
- Procedure HeaderEnd(Alevel : Integer); virtual;
- // Basic line formatting.
- Procedure ParagraphStart; virtual;
- Procedure ParagraphEnd; virtual;
- Procedure LineBreak; virtual;
- Procedure Rule; virtual;
- // text formatting.
- Procedure BoldStart; Virtual;
- Procedure BoldEnd;Virtual;
- Procedure ItalicStart;Virtual;
- Procedure ItalicEnd;Virtual;
- Procedure UnderlineStart;Virtual;
- Procedure UnderlineEnd;Virtual;
- // Preformatted.
- Procedure PreformatStart; virtual;
- Procedure PreformatEnd; virtual;
- // Table support
- Procedure TableStart( NoCols: Integer; Border : Boolean); virtual;
- Procedure TableEnd; virtual;
- Procedure RowStart; virtual;
- Procedure RowEnd; virtual;
- Procedure RowNext;
- Procedure CellStart; virtual;
- Procedure CellEnd; virtual;
- Procedure CellNext;
- Procedure HeaderCellStart; virtual;
- Procedure HeaderCellEnd; virtual;
- Procedure HeaderCellNext;
- // List support;
- Procedure ListStart(ListType : TListType); Virtual;
- Procedure ListEnd(ListType : TListType); Virtual;
- Procedure ListItemStart; Virtual;
- Procedure ListItemEnd; Virtual;
- Procedure ListItem(Const AText : String);
- Procedure DefinitionItem(Const Aname,AText : String); Virtual;
- Procedure WriteList(ListType : TListType; List : TStrings);
- Protected
- Property Stream : TStream Read FStream;
- end;
- const
- LineFeed = LineEnding;
- Implementation
- { TFormattingWriter }
- procedure TFormattingWriter.BoldEnd;
- begin
- end;
- procedure TFormattingWriter.BoldStart;
- begin
- end;
- procedure TFormattingWriter.CellEnd;
- begin
- end;
- procedure TFormattingWriter.CellStart;
- begin
- end;
- procedure TFormattingWriter.CellNext;
- begin
- CellEnd;
- CellStart;
- end;
- constructor TFormattingWriter.Create(AStream: TStream);
- begin
- FStream:=AStream;
- end;
- procedure TFormattingWriter.DefinitionItem(const Aname, AText: String);
- begin
- end;
- procedure TFormattingWriter.DocumentEnd;
- begin
- end;
- procedure TFormattingWriter.DocumentStart(const Title: String);
- begin
- end;
- procedure TFormattingWriter.Dump(const AText: String);
- begin
- FStream.WriteBuffer(Atext[1],Length(AText));
- end;
- procedure TFormattingWriter.DumpLn(const AText: String);
- begin
- Dump(Atext);
- Dump(LineFeed);
- end;
- Function TFormattingWriter.EscapeText(AText: String) : String;
- begin
- Result:=AText;
- end;
- procedure TFormattingWriter.Header(Alevel: Integer; Msg: String);
- begin
- HeaderStart(ALevel);
- Write(Msg);
- HeaderEnd(Alevel)
- end;
- procedure TFormattingWriter.HeaderCellEnd;
- begin
- end;
- procedure TFormattingWriter.HeaderCellStart;
- begin
- end;
- procedure TFormattingWriter.HeaderCellNext;
- begin
- HeaderCellEnd;
- HeaderCellStart;
- end;
- procedure TFormattingWriter.HeaderEnd(Alevel: Integer);
- begin
- end;
- procedure TFormattingWriter.HeaderStart(Alevel: Integer);
- begin
- end;
- procedure TFormattingWriter.ItalicEnd;
- begin
- end;
- procedure TFormattingWriter.ItalicStart;
- begin
- end;
- procedure TFormattingWriter.LineBreak;
- begin
- end;
- procedure TFormattingWriter.ListEnd(ListType: TListType);
- begin
- end;
- procedure TFormattingWriter.ListItem(const AText: String);
- begin
- ListItemStart;
- Write(Atext);
- ListItemEnd;
- end;
- procedure TFormattingWriter.ListItemEnd;
- begin
- end;
- procedure TFormattingWriter.ListItemStart;
- begin
- end;
- procedure TFormattingWriter.ListStart(ListType: TListType);
- begin
- end;
- procedure TFormattingWriter.ParagraphEnd;
- begin
- end;
- procedure TFormattingWriter.ParagraphStart;
- begin
- end;
- procedure TFormattingWriter.PreformatEnd;
- begin
- end;
- procedure TFormattingWriter.PreformatStart;
- begin
- end;
- procedure TFormattingWriter.RowEnd;
- begin
- end;
- procedure TFormattingWriter.RowStart;
- begin
- end;
- procedure TFormattingWriter.RowNext;
- begin
- RowEnd;
- RowStart;
- end;
- procedure TFormattingWriter.Rule;
- begin
- end;
- procedure TFormattingWriter.TableStart(NoCols: Integer; Border: Boolean);
- begin
- end;
- procedure TFormattingWriter.TableEnd;
- begin
- end;
- procedure TFormattingWriter.UnderlineEnd;
- begin
- end;
- procedure TFormattingWriter.UnderlineStart;
- begin
- end;
- procedure TFormattingWriter.Write(const AText: String);
- begin
- Dump(EscapeText(Atext));
- end;
- procedure TFormattingWriter.WriteFmt(const Fmt: String; Args: array of const);
- begin
- Write(Format(Fmt,Args));
- end;
- procedure TFormattingWriter.WriteList(ListType: TListType; List: TStrings);
- Var
- I,J : integer;
- N,V : String;
- begin
- ListStart(ListType);
- try
- For I:=0 to List.Count-1 do
- if ListType<>ltDefinition then
- ListItem(List[i])
- else
- begin
- V:=List[i];
- J:=Pos('=',V);
- if (J>0) then
- begin
- N:=Copy(V,1,J-1);
- Delete(V,1,J);
- end;
- DefinitionItem(N,V);
- end;
- finally
- ListEnd(ListType)
- end;
- end;
- end.
|