wtex.pp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  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 wtex;
  12. interface
  13. {$ifdef fpc}
  14. {$mode objfpc}
  15. {$endif}
  16. uses wformat,classes,sysutils;
  17. Type
  18. TTexWriter=Class(TFormattingWriter)
  19. FCellCount : Integer;
  20. Protected
  21. Procedure IncCellCount;
  22. Property CellCount : Integer Read FCellCount Write FCellCount;
  23. Public
  24. Procedure ScopeStart;
  25. Procedure ScopeEnd;
  26. Procedure EnvironmentStart(Const Name,Opts : String);
  27. Procedure EnvironmentEnd(Const Name : String);
  28. Function EscapeText (AText : String) : String; override;
  29. Procedure DocumentStart(Const Title : String); override;
  30. Procedure DocumentEnd; override;
  31. Procedure HeaderStart(Alevel : Integer); override;
  32. Procedure HeaderEnd(Alevel : Integer); override;
  33. Procedure ParagraphEnd; override;
  34. Procedure LineBreak; override;
  35. Procedure Rule; override;
  36. Procedure BoldStart; override;
  37. Procedure BoldEnd;override;
  38. Procedure ItalicStart;override;
  39. Procedure ItalicEnd;override;
  40. Procedure UnderlineStart;override;
  41. Procedure UnderlineEnd;override;
  42. Procedure PreformatStart; override;
  43. Procedure PreformatEnd; override;
  44. Procedure TableStart( NoCols: Integer; Border : Boolean); override;
  45. Procedure TableEnd; override;
  46. Procedure RowStart; override;
  47. Procedure RowEnd; override;
  48. Procedure CellStart; override;
  49. Procedure HeaderCellStart; override;
  50. Procedure HeaderCellEnd; override;
  51. Procedure ListStart(ListType : TListType); override;
  52. Procedure ListEnd(ListType : TListType); override;
  53. Procedure ListItemStart; override;
  54. Procedure DefinitionItem(Const Aname,AText : String); override;
  55. end;
  56. Const
  57. ListNames : Array[TListType] of string
  58. = ('enumerate','itemize','definition');
  59. implementation
  60. { TTexWriter }
  61. procedure TTexWriter.BoldEnd;
  62. begin
  63. ScopeEnd;
  64. end;
  65. procedure TTexWriter.BoldStart;
  66. begin
  67. dump('\textbf');
  68. ScopeStart;
  69. end;
  70. procedure TTexWriter.CellStart;
  71. begin
  72. If CellCount<>0 then
  73. Dump('&');
  74. IncCellCount;
  75. end;
  76. procedure TTexWriter.DefinitionItem(const Aname, AText: String);
  77. begin
  78. dump('\item[');
  79. Write(AName);
  80. Dump(']');
  81. Write(Atext);
  82. end;
  83. procedure TTexWriter.DocumentEnd;
  84. begin
  85. dump('\end{document}')
  86. end;
  87. procedure TTexWriter.DocumentStart(const Title: String);
  88. begin
  89. dumpln('\documentclass{report}');
  90. dumpln('\usepackage{a4}');
  91. dumpln('\begin{document}');
  92. dump('\title');
  93. ScopeStart;
  94. Write(Title);
  95. ScopeEnd;
  96. end;
  97. procedure TTexWriter.EnvironmentStart(const Name,opts: String);
  98. begin
  99. Dump('\begin');
  100. If Opts<>'' then
  101. Dump(Opts);
  102. ScopeStart;
  103. Dump(Name);
  104. ScopeEnd;
  105. end;
  106. procedure TTexWriter.EnvironmentEnd(const Name: String);
  107. begin
  108. Dump('\end');
  109. ScopeStart;
  110. Dump(Name);
  111. ScopeEnd;
  112. end;
  113. function TTexWriter.EscapeText(AText: String): String;
  114. begin
  115. Result:=StringReplace(AText,'_','\_',[rfReplaceAll]);
  116. end;
  117. procedure TTexWriter.HeaderCellEnd;
  118. begin
  119. CellEnd;
  120. end;
  121. procedure TTexWriter.HeaderCellStart;
  122. begin
  123. CellStart;
  124. end;
  125. procedure TTexWriter.HeaderEnd(Alevel: Integer);
  126. begin
  127. ScopeEnd;
  128. Dumpln('');
  129. end;
  130. procedure TTexWriter.HeaderStart(Alevel: Integer);
  131. Const
  132. Headers : Array [0..4] of string =
  133. ('\part','\chapter','\section','\subsection','\subsubsection');
  134. begin
  135. dump(Headers[Alevel]);
  136. ScopeStart;
  137. end;
  138. procedure TTexWriter.IncCellCount;
  139. begin
  140. Inc(FCellCount);
  141. end;
  142. procedure TTexWriter.ItalicEnd;
  143. begin
  144. ScopeEnd;
  145. end;
  146. procedure TTexWriter.ItalicStart;
  147. begin
  148. dump('\textit');
  149. ScopeStart;
  150. end;
  151. procedure TTexWriter.LineBreak;
  152. begin
  153. Dump('\\');
  154. end;
  155. procedure TTexWriter.ListEnd(ListType: TListType);
  156. begin
  157. EnvironmentEnd(ListNames[ListType]);
  158. end;
  159. procedure TTexWriter.ListItemStart;
  160. begin
  161. dump('\item');
  162. end;
  163. procedure TTexWriter.ListStart(ListType: TListType);
  164. begin
  165. EnvironmentStart(ListNames[ListType],'');
  166. end;
  167. procedure TTexWriter.ParagraphEnd;
  168. begin
  169. DumpLn(LineFeed+LineFeed);
  170. end;
  171. procedure TTexWriter.PreformatEnd;
  172. begin
  173. EnvironmentEnd('verbatim')
  174. end;
  175. procedure TTexWriter.PreformatStart;
  176. begin
  177. EnvironmentStart('verbatim','')
  178. end;
  179. procedure TTexWriter.RowEnd;
  180. begin
  181. DumpLn('\\')
  182. end;
  183. procedure TTexWriter.RowStart;
  184. begin
  185. FCellCount:=0;
  186. end;
  187. procedure TTexWriter.Rule;
  188. begin
  189. dump('\hline');
  190. end;
  191. procedure TTexWriter.ScopeEnd;
  192. begin
  193. Dump('}');
  194. end;
  195. procedure TTexWriter.ScopeStart;
  196. begin
  197. Dump('{');
  198. end;
  199. procedure TTexWriter.TableStart(NoCols: Integer; Border: Boolean);
  200. begin
  201. // EnvironmentStart('table','');
  202. EnvironmentStart('tabular','');
  203. ScopeStart;
  204. Dump(StringOfChar('l',NoCols));
  205. ScopeEnd;
  206. DumpLn('');
  207. end;
  208. procedure TTexWriter.TableEnd;
  209. begin
  210. EnvironmentEnd('tabular');
  211. // EnvironmentEnd('table');
  212. end;
  213. procedure TTexWriter.UnderlineEnd;
  214. begin
  215. ScopeEnd;
  216. end;
  217. procedure TTexWriter.UnderlineStart;
  218. begin
  219. dump('\textul');
  220. ScopeStart;
  221. end;
  222. end.
  223. {
  224. $Log$
  225. Revision 1.1 2003-10-01 20:49:29 michael
  226. + Initial implementation
  227. }