wtex.pp 5.3 KB

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