wformat.pp 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325
  1. {
  2. $Id$
  3. This file is part of the Free Component Library (FCL)
  4. Copyright (c) 1999-2000 by the Free Pascal development team
  5. See the file COPYING.FPC, included in this distribution,
  6. for details about the copyright.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  10. **********************************************************************}
  11. unit wformat;
  12. {$ifdef fpc}
  13. {$mode objfpc}
  14. {$endif}
  15. Interface
  16. uses Classes,SysUtils;
  17. Type
  18. TlistType = (ltNumbered,ltOrdered,ltDefinition);
  19. TFormattingWriter = Class
  20. Private
  21. FStream : TStream;
  22. Public
  23. Constructor Create (AStream : TStream); Virtual;
  24. // To be overridden by descendents
  25. Function EscapeText (AText : String) : String; Virtual;
  26. // Quick dump.
  27. Procedure Dump(Const AText : String);
  28. Procedure DumpLn(Const AText : String);
  29. // Formatted write. Calls escapetext.
  30. Procedure Write(Const AText : String);
  31. Procedure WriteFmt(Const Fmt : String; Args : Array of const);
  32. // Document Structure
  33. Procedure DocumentStart(Const Title : String); Virtual;
  34. Procedure DocumentEnd; Virtual;
  35. // Header formatting
  36. Procedure Header(Alevel : Integer; Msg : String);
  37. Procedure HeaderStart(Alevel : Integer); virtual;
  38. Procedure HeaderEnd(Alevel : Integer); virtual;
  39. // Basic line formatting.
  40. Procedure ParagraphStart; virtual;
  41. Procedure ParagraphEnd; virtual;
  42. Procedure LineBreak; virtual;
  43. Procedure Rule; virtual;
  44. // text formatting.
  45. Procedure BoldStart; Virtual;
  46. Procedure BoldEnd;Virtual;
  47. Procedure ItalicStart;Virtual;
  48. Procedure ItalicEnd;Virtual;
  49. Procedure UnderlineStart;Virtual;
  50. Procedure UnderlineEnd;Virtual;
  51. // Preformatted.
  52. Procedure PreformatStart; virtual;
  53. Procedure PreformatEnd; virtual;
  54. // Table support
  55. Procedure TableStart( NoCols: Integer; Border : Boolean); virtual;
  56. Procedure TableEnd; virtual;
  57. Procedure RowStart; virtual;
  58. Procedure RowEnd; virtual;
  59. Procedure RowNext;
  60. Procedure CellStart; virtual;
  61. Procedure CellEnd; virtual;
  62. Procedure CellNext;
  63. Procedure HeaderCellStart; virtual;
  64. Procedure HeaderCellEnd; virtual;
  65. Procedure HeaderCellNext;
  66. // List support;
  67. Procedure ListStart(ListType : TListType); Virtual;
  68. Procedure ListEnd(ListType : TListType); Virtual;
  69. Procedure ListItemStart; Virtual;
  70. Procedure ListItemEnd; Virtual;
  71. Procedure ListItem(Const AText : String);
  72. Procedure DefinitionItem(Const Aname,AText : String); Virtual;
  73. Procedure WriteList(ListType : TListType; List : TStrings);
  74. Protected
  75. Property Stream : TStream Read FStream;
  76. end;
  77. const
  78. LineFeed = LineEnding;
  79. Implementation
  80. { TFormattingWriter }
  81. procedure TFormattingWriter.BoldEnd;
  82. begin
  83. end;
  84. procedure TFormattingWriter.BoldStart;
  85. begin
  86. end;
  87. procedure TFormattingWriter.CellEnd;
  88. begin
  89. end;
  90. procedure TFormattingWriter.CellStart;
  91. begin
  92. end;
  93. procedure TFormattingWriter.CellNext;
  94. begin
  95. CellEnd;
  96. CellStart;
  97. end;
  98. constructor TFormattingWriter.Create(AStream: TStream);
  99. begin
  100. FStream:=AStream;
  101. end;
  102. procedure TFormattingWriter.DefinitionItem(const Aname, AText: String);
  103. begin
  104. end;
  105. procedure TFormattingWriter.DocumentEnd;
  106. begin
  107. end;
  108. procedure TFormattingWriter.DocumentStart(const Title: String);
  109. begin
  110. end;
  111. procedure TFormattingWriter.Dump(const AText: String);
  112. begin
  113. FStream.WriteBuffer(Atext[1],Length(AText));
  114. end;
  115. procedure TFormattingWriter.DumpLn(const AText: String);
  116. begin
  117. Dump(Atext);
  118. Dump(LineFeed);
  119. end;
  120. Function TFormattingWriter.EscapeText(AText: String) : String;
  121. begin
  122. Result:=AText;
  123. end;
  124. procedure TFormattingWriter.Header(Alevel: Integer; Msg: String);
  125. begin
  126. HeaderStart(ALevel);
  127. Write(Msg);
  128. HeaderEnd(Alevel)
  129. end;
  130. procedure TFormattingWriter.HeaderCellEnd;
  131. begin
  132. end;
  133. procedure TFormattingWriter.HeaderCellStart;
  134. begin
  135. end;
  136. procedure TFormattingWriter.HeaderCellNext;
  137. begin
  138. HeaderCellEnd;
  139. HeaderCellStart;
  140. end;
  141. procedure TFormattingWriter.HeaderEnd(Alevel: Integer);
  142. begin
  143. end;
  144. procedure TFormattingWriter.HeaderStart(Alevel: Integer);
  145. begin
  146. end;
  147. procedure TFormattingWriter.ItalicEnd;
  148. begin
  149. end;
  150. procedure TFormattingWriter.ItalicStart;
  151. begin
  152. end;
  153. procedure TFormattingWriter.LineBreak;
  154. begin
  155. end;
  156. procedure TFormattingWriter.ListEnd(ListType: TListType);
  157. begin
  158. end;
  159. procedure TFormattingWriter.ListItem(const AText: String);
  160. begin
  161. ListItemStart;
  162. Write(Atext);
  163. ListItemEnd;
  164. end;
  165. procedure TFormattingWriter.ListItemEnd;
  166. begin
  167. end;
  168. procedure TFormattingWriter.ListItemStart;
  169. begin
  170. end;
  171. procedure TFormattingWriter.ListStart(ListType: TListType);
  172. begin
  173. end;
  174. procedure TFormattingWriter.ParagraphEnd;
  175. begin
  176. end;
  177. procedure TFormattingWriter.ParagraphStart;
  178. begin
  179. end;
  180. procedure TFormattingWriter.PreformatEnd;
  181. begin
  182. end;
  183. procedure TFormattingWriter.PreformatStart;
  184. begin
  185. end;
  186. procedure TFormattingWriter.RowEnd;
  187. begin
  188. end;
  189. procedure TFormattingWriter.RowStart;
  190. begin
  191. end;
  192. procedure TFormattingWriter.RowNext;
  193. begin
  194. RowEnd;
  195. RowStart;
  196. end;
  197. procedure TFormattingWriter.Rule;
  198. begin
  199. end;
  200. procedure TFormattingWriter.TableStart(NoCols: Integer; Border: Boolean);
  201. begin
  202. end;
  203. procedure TFormattingWriter.TableEnd;
  204. begin
  205. end;
  206. procedure TFormattingWriter.UnderlineEnd;
  207. begin
  208. end;
  209. procedure TFormattingWriter.UnderlineStart;
  210. begin
  211. end;
  212. procedure TFormattingWriter.Write(const AText: String);
  213. begin
  214. Dump(EscapeText(Atext));
  215. end;
  216. procedure TFormattingWriter.WriteFmt(const Fmt: String; Args: array of const);
  217. begin
  218. Write(Format(Fmt,Args));
  219. end;
  220. procedure TFormattingWriter.WriteList(ListType: TListType; List: TStrings);
  221. Var
  222. I,J : integer;
  223. N,V : String;
  224. begin
  225. ListStart(ListType);
  226. try
  227. For I:=0 to List.Count-1 do
  228. if ListType<>ltDefinition then
  229. ListItem(List[i])
  230. else
  231. begin
  232. V:=List[i];
  233. J:=Pos('=',V);
  234. if (J>0) then
  235. begin
  236. N:=Copy(V,1,J-1);
  237. Delete(V,1,J);
  238. end;
  239. DefinitionItem(N,V);
  240. end;
  241. finally
  242. ListEnd(ListType)
  243. end;
  244. end;
  245. end.
  246. {
  247. $Log$
  248. Revision 1.3 2003-10-04 13:33:43 florian
  249. * system unit has a LineEnding
  250. Revision 1.2 2003/10/01 21:05:39 michael
  251. + Stream property is now protected
  252. Revision 1.1 2003/10/01 20:49:29 michael
  253. + Initial implementation
  254. }