dw_latex.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. {
  2. FPDoc - Free Pascal Documentation Tool
  3. Copyright (C) 2000 - 2003 by
  4. Areca Systems GmbH / Sebastian Guenther, [email protected]
  5. * LaTeX output generator
  6. See the file COPYING, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. }
  12. {$mode objfpc}
  13. {$H+}
  14. unit dw_LaTeX;
  15. interface
  16. uses DOM, dGlobals, PasTree;
  17. const
  18. LateXHighLight : Boolean = False;
  19. TexExtension : String = '.tex';
  20. Procedure CreateLaTeXDocForPackage(APackage: TPasPackage; AEngine: TFPDocEngine);
  21. implementation
  22. uses SysUtils, Classes, dwLinear, dwriter;
  23. Type
  24. { TLaTeXWriter }
  25. TLaTeXWriter = class(TLinearWriter)
  26. protected
  27. FLink: String;
  28. FImageDir: String;
  29. FTableCount : Integer;
  30. FInVerbatim : Boolean;
  31. Inlist,
  32. TableRowStartFlag,
  33. TableCaptionWritten: Boolean;
  34. // Linear documentation methods overrides;
  35. procedure WriteLabel(Const S : String); override;
  36. procedure WriteIndex(Const S : String); override;
  37. Procedure WriteExampleFile(FN : String); override;
  38. Procedure StartProcedure; override;
  39. Procedure EndProcedure; override;
  40. Procedure StartProperty; override;
  41. Procedure EndProperty; override;
  42. Procedure StartSynopsis; override;
  43. Procedure StartDeclaration; override;
  44. Procedure StartVisibility; override;
  45. Procedure StartDescription; override;
  46. Procedure StartAccess; override;
  47. Procedure StartErrors; override;
  48. Procedure StartVersion; override;
  49. Procedure StartSeealso; override;
  50. Procedure EndSeealso; override;
  51. procedure StartUnitOverview(AModuleName,AModuleLabel : String);override;
  52. procedure WriteUnitEntry(UnitRef : TPasType); override;
  53. Procedure EndUnitOverview; override;
  54. function GetLabel(AElement: TPasElement): String; override;
  55. procedure StartListing(Frames: Boolean; const name: String); override;
  56. procedure EndListing; override;
  57. Function EscapeText(S : String) : String; override;
  58. Function StripText(S : String) : String; override;
  59. procedure WriteCommentLine; override;
  60. procedure WriteComment(Comment : String);override;
  61. procedure StartSection(SectionName : String);override;
  62. procedure StartSubSection(SubSectionName : String);override;
  63. procedure StartSubSubSection(SubSubSectionName : String);override;
  64. procedure StartChapter(ChapterName : String); override;
  65. procedure StartOverview(WithAccess : Boolean); override;
  66. procedure EndOverview; override;
  67. procedure WriteOverviewMember(ALabel,AName,Access,ADescr : String); override;
  68. procedure WriteOverviewMember(ALabel,AName,ADescr : String); override;
  69. Class Function FileNameExtension : String; override;
  70. // Description node conversion
  71. procedure DescrBeginBold; override;
  72. procedure DescrEndBold; override;
  73. procedure DescrBeginItalic; override;
  74. procedure DescrEndItalic; override;
  75. procedure DescrBeginEmph; override;
  76. procedure DescrEndEmph; override;
  77. procedure DescrWriteImageEl(const AFileName, ACaption, ALinkName : DOMString); override;
  78. procedure DescrWriteFileEl(const AText: DOMString); override;
  79. procedure DescrWriteKeywordEl(const AText: DOMString); override;
  80. procedure DescrWriteVarEl(const AText: DOMString); override;
  81. procedure DescrBeginLink(const AId: DOMString); override;
  82. procedure DescrEndLink; override;
  83. procedure DescrBeginURL(const AURL: DOMString); override; // Provides a default implementation
  84. procedure DescrEndURL; override;
  85. procedure DescrWriteLinebreak; override;
  86. procedure DescrBeginParagraph; override;
  87. procedure DescrBeginCode(HasBorder: Boolean; const AHighlighterName: String); override;
  88. procedure DescrWriteCodeLine(const ALine: String); override;
  89. procedure DescrEndCode; override;
  90. procedure DescrEndParagraph; override;
  91. procedure DescrBeginOrderedList; override;
  92. procedure DescrEndOrderedList; override;
  93. procedure DescrBeginUnorderedList; override;
  94. procedure DescrEndUnorderedList; override;
  95. procedure DescrBeginDefinitionList; override;
  96. procedure DescrEndDefinitionList; override;
  97. procedure DescrBeginListItem; override;
  98. procedure DescrEndListItem; override;
  99. procedure DescrBeginDefinitionTerm; override;
  100. procedure DescrEndDefinitionTerm; override;
  101. procedure DescrBeginDefinitionEntry; override;
  102. procedure DescrEndDefinitionEntry; override;
  103. procedure DescrBeginSectionTitle; override;
  104. procedure DescrBeginSectionBody; override;
  105. procedure DescrEndSection; override;
  106. procedure DescrBeginRemark; override;
  107. procedure DescrEndRemark; override;
  108. procedure DescrBeginTable(ColCount: Integer; HasBorder: Boolean); override;
  109. procedure DescrEndTable; override;
  110. procedure DescrBeginTableCaption; override;
  111. procedure DescrEndTableCaption; override;
  112. procedure DescrBeginTableHeadRow; override;
  113. procedure DescrEndTableHeadRow; override;
  114. procedure DescrBeginTableRow; override;
  115. procedure DescrEndTableRow; override;
  116. procedure DescrBeginTableCell; override;
  117. procedure DescrEndTableCell; override;
  118. // TFPDocWriter class methods
  119. Function InterPretOption(Const Cmd,Arg : String) : boolean; override;
  120. Property ImageDir : String Read FImageDir Write FImageDir;
  121. end;
  122. function TLaTeXWriter.GetLabel(AElement: TPasElement): String;
  123. var
  124. i: Integer;
  125. begin
  126. if AElement.ClassType = TPasUnresolvedTypeRef then
  127. Result := Engine.ResolveLink(Module, AElement.Name)
  128. else
  129. begin
  130. Result := AElement.PathName;
  131. Result := LowerCase(Copy(Result, 2, Length(Result) - 1));
  132. end;
  133. for i := 1 to Length(Result) do
  134. if Result[i] = '.' then
  135. Result[i] := ':';
  136. end;
  137. Function TLatexWriter.EscapeText(S : String) : String;
  138. var
  139. i: Integer;
  140. begin
  141. if FInVerBatim=True then
  142. Result:=S
  143. else
  144. begin
  145. SetLength(Result, 0);
  146. for i := 1 to Length(S) do
  147. case S[i] of
  148. '&','{','}','#','_','$','%': // Escape these characters
  149. Result := Result + '\' + S[i];
  150. '~','^':
  151. Result := Result + '\'+S[i]+' ';
  152. '\':
  153. Result:=Result+'$\backslash$'
  154. else
  155. Result := Result + S[i];
  156. end;
  157. end;
  158. end;
  159. Function TLatexWriter.StripText(S : String) : String;
  160. var
  161. I: Integer;
  162. begin
  163. SetLength(Result, 0);
  164. for i := 1 to Length(S) do
  165. If not (S[i] in ['&','{','}','#','_','$','%','''','~','^', '\']) then
  166. Result := Result + S[i];
  167. end;
  168. procedure TLaTeXWriter.DescrBeginBold;
  169. begin
  170. Write('\textbf{');
  171. end;
  172. procedure TLaTeXWriter.DescrEndBold;
  173. begin
  174. Write('}');
  175. end;
  176. procedure TLaTeXWriter.DescrBeginItalic;
  177. begin
  178. Write('\textit{');
  179. end;
  180. procedure TLaTeXWriter.DescrEndItalic;
  181. begin
  182. Write('}');
  183. end;
  184. procedure TLaTeXWriter.DescrBeginEmph;
  185. begin
  186. Write('\emph{');
  187. end;
  188. procedure TLaTeXWriter.DescrEndEmph;
  189. begin
  190. Write('}');
  191. end;
  192. procedure TLaTeXWriter.DescrWriteImageEl(const AFileName, ACaption, ALinkName : DOMString);
  193. Var
  194. FN : String;
  195. L : Integer;
  196. begin
  197. Writeln('\begin{figure}[ht]%');
  198. Writeln('\begin{center}');
  199. If (ACaption<>ACaption) then
  200. Writeln(Format('\caption{%s}',[EscapeText(ACaption)]));
  201. If (ALinkName<>'') then
  202. WriteLabel('fig:'+ALinkName);
  203. FN:=ImageDir;
  204. L:=Length(FN);
  205. If (L>0) and (FN[l]<>'/') then
  206. FN:=FN+'/';
  207. FN:=FN+AFileName;
  208. Writeln('\epsfig{file='+FN+'}');
  209. Writeln('\end{center}');
  210. Writeln('\end{figure}');
  211. end;
  212. procedure TLaTeXWriter.DescrWriteFileEl(const AText: DOMString);
  213. begin
  214. Write('\file{');
  215. DescrWriteText(AText);
  216. Write('}');
  217. end;
  218. procedure TLaTeXWriter.DescrWriteKeywordEl(const AText: DOMString);
  219. begin
  220. Write('\textbf{\\ttfamily ');
  221. DescrWriteText(AText);
  222. Write('}');
  223. end;
  224. procedure TLaTeXWriter.DescrWriteVarEl(const AText: DOMString);
  225. begin
  226. Write('\var{');
  227. DescrWriteText(AText);
  228. Write('}');
  229. end;
  230. procedure TLaTeXWriter.DescrBeginLink(const AId: DOMString);
  231. begin
  232. FLink := Engine.ResolveLink(Module, AId);
  233. // System.WriteLn('Link "', AId, '" => ', FLink);
  234. end;
  235. procedure TLaTeXWriter.DescrEndLink;
  236. begin
  237. WriteF(' (\pageref{%s})',[StripText(Flink)]);
  238. end;
  239. procedure TLaTeXWriter.DescrBeginURL(const AURL: DOMString);
  240. begin
  241. Inherited; // Save link
  242. Write('\htmladdnormallink{');
  243. end;
  244. procedure TLaTeXWriter.DescrEndURL;
  245. begin
  246. WriteF('}{%s}',[LastURL]);
  247. LastURL:='';
  248. end;
  249. procedure TLaTeXWriter.DescrWriteLinebreak;
  250. begin
  251. WriteLn('\\');
  252. end;
  253. procedure TLaTeXWriter.DescrBeginParagraph;
  254. begin
  255. // Do nothing
  256. end;
  257. procedure TLaTeXWriter.DescrEndParagraph;
  258. begin
  259. WriteLn('');
  260. WriteLn('');
  261. end;
  262. procedure TLaTeXWriter.DescrBeginCode(HasBorder: Boolean;
  263. const AHighlighterName: String);
  264. begin
  265. StartListing(HasBorder,'');
  266. end;
  267. procedure TLaTeXWriter.DescrWriteCodeLine(const ALine: String);
  268. begin
  269. WriteLn(ALine);
  270. end;
  271. procedure TLaTeXWriter.DescrEndCode;
  272. begin
  273. EndListing
  274. end;
  275. procedure TLaTeXWriter.DescrBeginOrderedList;
  276. begin
  277. WriteLn('\begin{enumerate}');
  278. end;
  279. procedure TLaTeXWriter.DescrEndOrderedList;
  280. begin
  281. WriteLn('\end{enumerate}');
  282. end;
  283. procedure TLaTeXWriter.DescrBeginUnorderedList;
  284. begin
  285. WriteLn('\begin{itemize}');
  286. end;
  287. procedure TLaTeXWriter.DescrEndUnorderedList;
  288. begin
  289. WriteLn('\end{itemize}');
  290. end;
  291. procedure TLaTeXWriter.DescrBeginDefinitionList;
  292. begin
  293. WriteLn('\begin{description}');
  294. end;
  295. procedure TLaTeXWriter.DescrEndDefinitionList;
  296. begin
  297. WriteLn('\end{description}');
  298. end;
  299. procedure TLaTeXWriter.DescrBeginListItem;
  300. begin
  301. Write('\item ');
  302. end;
  303. procedure TLaTeXWriter.DescrEndListItem;
  304. begin
  305. WriteLn('');
  306. end;
  307. procedure TLaTeXWriter.DescrBeginDefinitionTerm;
  308. begin
  309. Write('\item[');
  310. end;
  311. procedure TLaTeXWriter.DescrEndDefinitionTerm;
  312. begin
  313. WriteLn(']');
  314. end;
  315. procedure TLaTeXWriter.DescrBeginDefinitionEntry;
  316. begin
  317. // Do nothing
  318. end;
  319. procedure TLaTeXWriter.DescrEndDefinitionEntry;
  320. begin
  321. WriteLn('');
  322. end;
  323. procedure TLaTeXWriter.DescrBeginSectionTitle;
  324. begin
  325. Write('\subsection{');
  326. end;
  327. procedure TLaTeXWriter.DescrBeginSectionBody;
  328. begin
  329. WriteLn('}');
  330. end;
  331. procedure TLaTeXWriter.DescrEndSection;
  332. begin
  333. // Do noting
  334. end;
  335. procedure TLaTeXWriter.DescrBeginRemark;
  336. begin
  337. WriteLn('\begin{remark}');
  338. end;
  339. procedure TLaTeXWriter.DescrEndRemark;
  340. begin
  341. WriteLn('\end{remark}');
  342. end;
  343. procedure TLaTeXWriter.DescrBeginTable(ColCount: Integer; HasBorder: Boolean);
  344. var
  345. i: Integer;
  346. begin
  347. // !!!: How do we set the border?
  348. Write('\begin{FPCltable}{');
  349. for i := 1 to ColCount do
  350. Write('l');
  351. write('}{');
  352. TableCaptionWritten:=False;
  353. end;
  354. procedure TLaTeXWriter.DescrEndTable;
  355. begin
  356. WriteLn('\end{FPCltable}');
  357. end;
  358. procedure TLaTeXWriter.DescrBeginTableCaption;
  359. begin
  360. // Do nothing.
  361. end;
  362. procedure TLaTeXWriter.DescrEndTableCaption;
  363. begin
  364. Write('}{table');
  365. Inc(FTableCount);
  366. Write(IntToStr(FTableCount));
  367. Writeln('}');
  368. TableCaptionWritten := True;
  369. end;
  370. procedure TLaTeXWriter.DescrBeginTableHeadRow;
  371. begin
  372. if not TableCaptionWritten then
  373. DescrEndTableCaption;
  374. TableRowStartFlag := True;
  375. end;
  376. procedure TLaTeXWriter.DescrEndTableHeadRow;
  377. begin
  378. WriteLn('\\ \hline');
  379. end;
  380. procedure TLaTeXWriter.DescrBeginTableRow;
  381. begin
  382. if not TableCaptionWritten then
  383. DescrEndTableCaption;
  384. TableRowStartFlag := True;
  385. end;
  386. procedure TLaTeXWriter.DescrEndTableRow;
  387. begin
  388. WriteLn('\\');
  389. end;
  390. procedure TLaTeXWriter.DescrBeginTableCell;
  391. begin
  392. if TableRowStartFlag then
  393. TableRowStartFlag := False
  394. else
  395. Write(' & ');
  396. end;
  397. procedure TLaTeXWriter.DescrEndTableCell;
  398. begin
  399. // Do nothing
  400. end;
  401. procedure TLaTeXWriter.WriteLabel(const s: String);
  402. begin
  403. WriteLnF('\label{%s}', [LowerCase(StripText(s))]);
  404. end;
  405. procedure TLaTeXWriter.WriteIndex(const s : String);
  406. begin
  407. Write('\index{');
  408. Write(EscapeText(s));
  409. Writeln('}');
  410. end;
  411. procedure TLaTeXWriter.StartListing(Frames: Boolean; const name: String);
  412. begin
  413. FInVerbatim:=True;
  414. if Not LaTexHighLight then
  415. begin
  416. Writeln('');
  417. Writeln('\begin{verbatim}');
  418. end
  419. else
  420. if Frames then
  421. Writelnf('\begin{lstlisting}{%s}',[StripText(Name)])
  422. else
  423. Writelnf('\begin{lstlisting}[frame=]{%s}',[StripText(Name)]);
  424. end;
  425. procedure TLaTeXWriter.EndListing;
  426. begin
  427. FInVerbatim:=False;
  428. If LaTexHighLight then
  429. Writeln('\end{lstlisting}')
  430. else
  431. Writeln('\end{verbatim}')
  432. end;
  433. procedure TLatexWriter.WriteCommentLine;
  434. const
  435. CommentLine =
  436. '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%';
  437. begin
  438. Writeln(CommentLine);
  439. end;
  440. procedure TLatexWriter.WriteComment(Comment : String);
  441. begin
  442. Write('% ');
  443. Writeln(Comment);
  444. end;
  445. procedure TLatexWriter.StartChapter(ChapterName : String);
  446. begin
  447. WriteCommentLine;
  448. WriteComment(ChapterName);
  449. WriteCommentLine;
  450. Writeln('\chapter{'+EscapeText(ChapterName)+'}');
  451. end;
  452. procedure TLatexWriter.StartSection(SectionName : String);
  453. begin
  454. WriteCommentLine;
  455. WriteComment(SectionName);
  456. Writeln('\section{'+EscapeText(SectionName)+'}');
  457. end;
  458. procedure TLatexWriter.StartSubSection(SubSectionName : String);
  459. begin
  460. WriteComment(SubSectionName);
  461. Writeln('\subsection{'+EscapeText(SubSectionName)+'}');
  462. end;
  463. procedure TLatexWriter.StartSubSubSection(SubSubSectionName : String);
  464. begin
  465. Writeln('\subsubsection{'+EscapeText(SubSubSectionName)+'}');
  466. end;
  467. procedure CreateLaTeXDocForPackage(APackage: TPasPackage; AEngine: TFPDocEngine);
  468. var
  469. Writer: TLaTeXWriter;
  470. begin
  471. Writer := TLaTeXWriter.Create(APackage, AEngine);
  472. try
  473. Writer.WriteDoc;
  474. finally
  475. Writer.Free;
  476. end;
  477. end;
  478. Procedure TLatexWriter.StartProcedure;
  479. begin
  480. Writeln('\begin{FPCList}');
  481. InList:=True;
  482. end;
  483. Procedure TLatexWriter.StartSynopsis;
  484. begin
  485. Writeln('\Synopsis');
  486. end;
  487. Procedure TLatexWriter.StartDeclaration;
  488. begin
  489. Writeln('\Declaration ');
  490. end;
  491. Procedure TLatexWriter.StartVisibility;
  492. begin
  493. Writeln('\Visibility');
  494. end;
  495. Procedure TLatexWriter.StartDescription;
  496. begin
  497. Writeln('\Description');
  498. end;
  499. Procedure TLatexWriter.StartErrors;
  500. begin
  501. Writeln('\Errors');
  502. end;
  503. procedure TLaTeXWriter.StartVersion;
  504. begin
  505. Writeln('\VersionInfo');
  506. end;
  507. Procedure TLatexWriter.StartAccess;
  508. begin
  509. Writeln('\Access')
  510. end;
  511. Procedure TLatexWriter.EndProcedure;
  512. begin
  513. InList:=False;
  514. Writeln('\end{FPCList}');
  515. end;
  516. Procedure TLatexWriter.StartProperty;
  517. begin
  518. Writeln('\begin{FPCList}');
  519. InList:=True;
  520. end;
  521. Procedure TLatexWriter.EndProperty;
  522. begin
  523. InList:=False;
  524. Writeln('\end{FPCList}');
  525. end;
  526. procedure TLateXWriter.WriteExampleFile(FN : String);
  527. begin
  528. If (FN<>'') then
  529. WritelnF('\FPCexample{%s}', [ChangeFileExt(FN,'')]);
  530. end;
  531. procedure TLatexWriter.StartOverview(WithAccess : Boolean);
  532. begin
  533. If WithAccess then
  534. begin
  535. WriteLn('\begin{tabularx}{\textwidth}{lllX}');
  536. WriteLnF('%s & %s & %s & %s \\ \hline',[EscapeText(SDocPage), EscapeText(SDocProperty), EscapeText(SDocAccess), EscapeText(SDocDescription)])
  537. end
  538. else
  539. begin
  540. WriteLn('\begin{tabularx}{\textwidth}{llX}');
  541. WriteLnF('%s & %s & %s \\ \hline',[EscapeText(SDocPage), EscapeText(SDocProperty), EscapeText(SDocDescription)])
  542. end;
  543. end;
  544. procedure TLatexWriter.EndOverview;
  545. begin
  546. WriteLn('\hline');
  547. WriteLn('\end{tabularx}');
  548. end;
  549. procedure TLatexWriter.WriteOverviewMember(ALabel,AName,Access,ADescr : String);
  550. begin
  551. WriteLnF('\pageref{%s} & %s & %s & %s \\',[ALabel,EscapeText(AName),Access,ADescr]);
  552. end;
  553. procedure TLatexWriter.WriteOverviewMember(ALabel,AName,ADescr : String);
  554. begin
  555. WriteLnF('\pageref{%s} & %s & %s \\',[ALabel,EscapeText(AName),ADescr]);
  556. end;
  557. class function TLaTeXWriter.FileNameExtension: String;
  558. begin
  559. Result:=TexExtension;
  560. end;
  561. Procedure TLatexWriter.StartSeeAlso;
  562. begin
  563. If not InList then
  564. begin
  565. Writeln('');
  566. Writeln('\begin{FPCList}');
  567. end;
  568. Writeln('\SeeAlso');
  569. end;
  570. procedure TLaTeXWriter.EndSeealso;
  571. begin
  572. If Not InList then
  573. Writeln('\end{FPCList}');
  574. end;
  575. procedure TLatexWriter.StartUnitOverview(AModuleName,AModuleLabel : String);
  576. begin
  577. WriteLnF('\begin{FPCltable}{lr}{%s}{%s:0units}',
  578. [Format(SDocUsedUnitsByUnitXY, [EscapeText(AModuleName)]), StripText(AModuleName)]);
  579. WriteLn('Name & Page \\ \hline');
  580. end;
  581. procedure TLatexWriter.WriteUnitEntry(UnitRef : TPasType);
  582. begin
  583. WriteLnF('%s\index{unit!%s} & \pageref{%s} \\',
  584. [EscapeText(UnitRef.Name), EscapeText(UnitRef.Name), StripText(GetLabel(UnitRef))]);
  585. end;
  586. procedure TLatexWriter.EndUnitOverview;
  587. begin
  588. WriteLn('\end{FPCltable}');
  589. end;
  590. Function TLatexWriter.InterPretOption(Const Cmd,Arg : String) : boolean;
  591. begin
  592. Result:=True;
  593. if (cmd= '--latex-highlight') then
  594. LatexHighLight:=True
  595. else if Cmd = '--latex-extension' then
  596. TexExtension:=Arg
  597. else if Cmd = '--image-dir' then
  598. ImageDir:=Arg
  599. else
  600. Result:=False;
  601. end;
  602. initialization
  603. // Do not localize.
  604. RegisterWriter(TLaTeXWriter,'latex','Latex output using fpc.sty class.');
  605. finalization
  606. UnRegisterWriter('latex');
  607. end.