dw_latex.pp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737
  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(const ALabel,AName,Access,ADescr : String); override;
  68. procedure WriteOverviewMember(const 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. else
  168. Result:=result+'!'
  169. end;
  170. procedure TLaTeXWriter.DescrBeginBold;
  171. begin
  172. Write('\textbf{');
  173. end;
  174. procedure TLaTeXWriter.DescrEndBold;
  175. begin
  176. Write('}');
  177. end;
  178. procedure TLaTeXWriter.DescrBeginItalic;
  179. begin
  180. Write('\textit{');
  181. end;
  182. procedure TLaTeXWriter.DescrEndItalic;
  183. begin
  184. Write('}');
  185. end;
  186. procedure TLaTeXWriter.DescrBeginEmph;
  187. begin
  188. Write('\emph{');
  189. end;
  190. procedure TLaTeXWriter.DescrEndEmph;
  191. begin
  192. Write('}');
  193. end;
  194. procedure TLaTeXWriter.DescrWriteImageEl(const AFileName, ACaption, ALinkName : DOMString);
  195. Var
  196. FN : String;
  197. L : Integer;
  198. begin
  199. Writeln('\begin{figure}[ht]%');
  200. Writeln('\begin{center}');
  201. If (ACaption<>ACaption) then
  202. Writeln(Format('\caption{%s}',[EscapeText(ACaption)]));
  203. If (ALinkName<>'') then
  204. WriteLabel('fig:'+ALinkName);
  205. FN:=ImageDir;
  206. L:=Length(FN);
  207. If (L>0) and (FN[l]<>'/') then
  208. FN:=FN+'/';
  209. FN:=FN+AFileName;
  210. Writeln('\epsfig{file='+FN+'}');
  211. Writeln('\end{center}');
  212. Writeln('\end{figure}');
  213. end;
  214. procedure TLaTeXWriter.DescrWriteFileEl(const AText: DOMString);
  215. begin
  216. Write('\file{');
  217. DescrWriteText(AText);
  218. Write('}');
  219. end;
  220. procedure TLaTeXWriter.DescrWriteKeywordEl(const AText: DOMString);
  221. begin
  222. Write('\textbf{\\ttfamily ');
  223. DescrWriteText(AText);
  224. Write('}');
  225. end;
  226. procedure TLaTeXWriter.DescrWriteVarEl(const AText: DOMString);
  227. begin
  228. Write('\var{');
  229. DescrWriteText(AText);
  230. Write('}');
  231. end;
  232. procedure TLaTeXWriter.DescrBeginLink(const AId: DOMString);
  233. begin
  234. FLink := Engine.ResolveLink(Module, AId);
  235. // System.WriteLn('Link "', AId, '" => ', FLink);
  236. end;
  237. procedure TLaTeXWriter.DescrEndLink;
  238. begin
  239. WriteF(' (\pageref{%s})',[StripText(Flink)]);
  240. end;
  241. procedure TLaTeXWriter.DescrBeginURL(const AURL: DOMString);
  242. begin
  243. Inherited; // Save link
  244. Write('\htmladdnormallink{');
  245. end;
  246. procedure TLaTeXWriter.DescrEndURL;
  247. begin
  248. WriteF('}{%s}',[LastURL]);
  249. LastURL:='';
  250. end;
  251. procedure TLaTeXWriter.DescrWriteLinebreak;
  252. begin
  253. WriteLn('\\');
  254. end;
  255. procedure TLaTeXWriter.DescrBeginParagraph;
  256. begin
  257. // Do nothing
  258. end;
  259. procedure TLaTeXWriter.DescrEndParagraph;
  260. begin
  261. WriteLn('');
  262. WriteLn('');
  263. end;
  264. procedure TLaTeXWriter.DescrBeginCode(HasBorder: Boolean;
  265. const AHighlighterName: String);
  266. begin
  267. StartListing(HasBorder,'');
  268. end;
  269. procedure TLaTeXWriter.DescrWriteCodeLine(const ALine: String);
  270. begin
  271. WriteLn(ALine);
  272. end;
  273. procedure TLaTeXWriter.DescrEndCode;
  274. begin
  275. EndListing
  276. end;
  277. procedure TLaTeXWriter.DescrBeginOrderedList;
  278. begin
  279. WriteLn('\begin{enumerate}');
  280. end;
  281. procedure TLaTeXWriter.DescrEndOrderedList;
  282. begin
  283. WriteLn('\end{enumerate}');
  284. end;
  285. procedure TLaTeXWriter.DescrBeginUnorderedList;
  286. begin
  287. WriteLn('\begin{itemize}');
  288. end;
  289. procedure TLaTeXWriter.DescrEndUnorderedList;
  290. begin
  291. WriteLn('\end{itemize}');
  292. end;
  293. procedure TLaTeXWriter.DescrBeginDefinitionList;
  294. begin
  295. WriteLn('\begin{description}');
  296. end;
  297. procedure TLaTeXWriter.DescrEndDefinitionList;
  298. begin
  299. WriteLn('\end{description}');
  300. end;
  301. procedure TLaTeXWriter.DescrBeginListItem;
  302. begin
  303. Write('\item ');
  304. end;
  305. procedure TLaTeXWriter.DescrEndListItem;
  306. begin
  307. WriteLn('');
  308. end;
  309. procedure TLaTeXWriter.DescrBeginDefinitionTerm;
  310. begin
  311. Write('\item[');
  312. end;
  313. procedure TLaTeXWriter.DescrEndDefinitionTerm;
  314. begin
  315. WriteLn(']');
  316. end;
  317. procedure TLaTeXWriter.DescrBeginDefinitionEntry;
  318. begin
  319. // Do nothing
  320. end;
  321. procedure TLaTeXWriter.DescrEndDefinitionEntry;
  322. begin
  323. WriteLn('');
  324. end;
  325. procedure TLaTeXWriter.DescrBeginSectionTitle;
  326. begin
  327. Write('\subsection{');
  328. end;
  329. procedure TLaTeXWriter.DescrBeginSectionBody;
  330. begin
  331. WriteLn('}');
  332. end;
  333. procedure TLaTeXWriter.DescrEndSection;
  334. begin
  335. // Do noting
  336. end;
  337. procedure TLaTeXWriter.DescrBeginRemark;
  338. begin
  339. WriteLn('\begin{remark}');
  340. end;
  341. procedure TLaTeXWriter.DescrEndRemark;
  342. begin
  343. WriteLn('\end{remark}');
  344. end;
  345. procedure TLaTeXWriter.DescrBeginTable(ColCount: Integer; HasBorder: Boolean);
  346. var
  347. i: Integer;
  348. begin
  349. // !!!: How do we set the border?
  350. Write('\begin{FPCltable}{');
  351. for i := 1 to ColCount do
  352. Write('l');
  353. write('}{');
  354. TableCaptionWritten:=False;
  355. end;
  356. procedure TLaTeXWriter.DescrEndTable;
  357. begin
  358. WriteLn('\end{FPCltable}');
  359. end;
  360. procedure TLaTeXWriter.DescrBeginTableCaption;
  361. begin
  362. // Do nothing.
  363. end;
  364. procedure TLaTeXWriter.DescrEndTableCaption;
  365. begin
  366. Write('}{table');
  367. Inc(FTableCount);
  368. Write(IntToStr(FTableCount));
  369. Writeln('}');
  370. TableCaptionWritten := True;
  371. end;
  372. procedure TLaTeXWriter.DescrBeginTableHeadRow;
  373. begin
  374. if not TableCaptionWritten then
  375. DescrEndTableCaption;
  376. TableRowStartFlag := True;
  377. end;
  378. procedure TLaTeXWriter.DescrEndTableHeadRow;
  379. begin
  380. WriteLn('\\ \hline');
  381. end;
  382. procedure TLaTeXWriter.DescrBeginTableRow;
  383. begin
  384. if not TableCaptionWritten then
  385. DescrEndTableCaption;
  386. TableRowStartFlag := True;
  387. end;
  388. procedure TLaTeXWriter.DescrEndTableRow;
  389. begin
  390. WriteLn('\\');
  391. end;
  392. procedure TLaTeXWriter.DescrBeginTableCell;
  393. begin
  394. if TableRowStartFlag then
  395. TableRowStartFlag := False
  396. else
  397. Write(' & ');
  398. end;
  399. procedure TLaTeXWriter.DescrEndTableCell;
  400. begin
  401. // Do nothing
  402. end;
  403. procedure TLaTeXWriter.WriteLabel(const s: String);
  404. begin
  405. WriteLnF('\label{%s}', [LowerCase(StripText(s))]);
  406. end;
  407. procedure TLaTeXWriter.WriteIndex(const s : String);
  408. begin
  409. Write('\index{');
  410. Write(EscapeText(s));
  411. Writeln('}');
  412. end;
  413. procedure TLaTeXWriter.StartListing(Frames: Boolean; const name: String);
  414. begin
  415. FInVerbatim:=True;
  416. if Not LaTexHighLight then
  417. begin
  418. Writeln('');
  419. Writeln('\begin{verbatim}');
  420. end
  421. else
  422. if Frames then
  423. Writelnf('\begin{lstlisting}{%s}',[StripText(Name)])
  424. else
  425. Writelnf('\begin{lstlisting}[frame=]{%s}',[StripText(Name)]);
  426. end;
  427. procedure TLaTeXWriter.EndListing;
  428. begin
  429. FInVerbatim:=False;
  430. If LaTexHighLight then
  431. Writeln('\end{lstlisting}')
  432. else
  433. Writeln('\end{verbatim}')
  434. end;
  435. procedure TLatexWriter.WriteCommentLine;
  436. const
  437. CommentLine =
  438. '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%';
  439. begin
  440. Writeln(CommentLine);
  441. end;
  442. procedure TLatexWriter.WriteComment(Comment : String);
  443. begin
  444. Write('% ');
  445. Writeln(Comment);
  446. end;
  447. procedure TLatexWriter.StartChapter(ChapterName : String);
  448. begin
  449. WriteCommentLine;
  450. WriteComment(ChapterName);
  451. WriteCommentLine;
  452. Writeln('\chapter{'+EscapeText(ChapterName)+'}');
  453. end;
  454. procedure TLatexWriter.StartSection(SectionName : String);
  455. begin
  456. WriteCommentLine;
  457. WriteComment(SectionName);
  458. Writeln('\section{'+EscapeText(SectionName)+'}');
  459. end;
  460. procedure TLatexWriter.StartSubSection(SubSectionName : String);
  461. begin
  462. WriteComment(SubSectionName);
  463. Writeln('\subsection{'+EscapeText(SubSectionName)+'}');
  464. end;
  465. procedure TLatexWriter.StartSubSubSection(SubSubSectionName : String);
  466. begin
  467. Writeln('\subsubsection{'+EscapeText(SubSubSectionName)+'}');
  468. end;
  469. procedure CreateLaTeXDocForPackage(APackage: TPasPackage; AEngine: TFPDocEngine);
  470. var
  471. Writer: TLaTeXWriter;
  472. begin
  473. Writer := TLaTeXWriter.Create(APackage, AEngine);
  474. try
  475. Writer.WriteDoc;
  476. finally
  477. Writer.Free;
  478. end;
  479. end;
  480. Procedure TLatexWriter.StartProcedure;
  481. begin
  482. Writeln('\begin{FPCList}');
  483. InList:=True;
  484. end;
  485. Procedure TLatexWriter.StartSynopsis;
  486. begin
  487. Writeln('\Synopsis');
  488. end;
  489. Procedure TLatexWriter.StartDeclaration;
  490. begin
  491. Writeln('\Declaration ');
  492. end;
  493. Procedure TLatexWriter.StartVisibility;
  494. begin
  495. Writeln('\Visibility');
  496. end;
  497. Procedure TLatexWriter.StartDescription;
  498. begin
  499. Writeln('\Description');
  500. end;
  501. Procedure TLatexWriter.StartErrors;
  502. begin
  503. Writeln('\Errors');
  504. end;
  505. procedure TLaTeXWriter.StartVersion;
  506. begin
  507. Writeln('\VersionInfo');
  508. end;
  509. Procedure TLatexWriter.StartAccess;
  510. begin
  511. Writeln('\Access')
  512. end;
  513. Procedure TLatexWriter.EndProcedure;
  514. begin
  515. InList:=False;
  516. Writeln('\end{FPCList}');
  517. end;
  518. Procedure TLatexWriter.StartProperty;
  519. begin
  520. Writeln('\begin{FPCList}');
  521. InList:=True;
  522. end;
  523. Procedure TLatexWriter.EndProperty;
  524. begin
  525. InList:=False;
  526. Writeln('\end{FPCList}');
  527. end;
  528. procedure TLateXWriter.WriteExampleFile(FN : String);
  529. begin
  530. If (FN<>'') then
  531. WritelnF('\FPCexample{%s}', [ChangeFileExt(FN,'')]);
  532. end;
  533. procedure TLatexWriter.StartOverview(WithAccess : Boolean);
  534. begin
  535. If WithAccess then
  536. begin
  537. WriteLn('\begin{tabularx}{\textwidth}{lllX}');
  538. WriteLnF('%s & %s & %s & %s \\ \hline',[EscapeText(SDocPage), EscapeText(SDocProperty), EscapeText(SDocAccess), EscapeText(SDocDescription)])
  539. end
  540. else
  541. begin
  542. WriteLn('\begin{tabularx}{\textwidth}{llX}');
  543. WriteLnF('%s & %s & %s \\ \hline',[EscapeText(SDocPage), EscapeText(SDocProperty), EscapeText(SDocDescription)])
  544. end;
  545. end;
  546. procedure TLatexWriter.EndOverview;
  547. begin
  548. WriteLn('\hline');
  549. WriteLn('\end{tabularx}');
  550. end;
  551. procedure TLatexWriter.WriteOverviewMember(const ALabel,AName,Access,ADescr : String);
  552. begin
  553. WriteLnF('\pageref{%s} & %s & %s & %s \\',[ALabel,EscapeText(AName),Access,ADescr]);
  554. end;
  555. procedure TLatexWriter.WriteOverviewMember(const ALabel,AName,ADescr : String);
  556. begin
  557. WriteLnF('\pageref{%s} & %s & %s \\',[ALabel,EscapeText(AName),ADescr]);
  558. end;
  559. class function TLaTeXWriter.FileNameExtension: String;
  560. begin
  561. Result:=TexExtension;
  562. end;
  563. Procedure TLatexWriter.StartSeeAlso;
  564. begin
  565. If not InList then
  566. begin
  567. Writeln('');
  568. Writeln('\begin{FPCList}');
  569. end;
  570. Writeln('\SeeAlso');
  571. end;
  572. procedure TLaTeXWriter.EndSeealso;
  573. begin
  574. If Not InList then
  575. Writeln('\end{FPCList}');
  576. end;
  577. procedure TLatexWriter.StartUnitOverview(AModuleName,AModuleLabel : String);
  578. begin
  579. WriteLnF('\begin{FPCltable}{lr}{%s}{%s:0units}',
  580. [Format(SDocUsedUnitsByUnitXY, [EscapeText(AModuleName)]), StripText(AModuleName)]);
  581. WriteLn('Name & Page \\ \hline');
  582. end;
  583. procedure TLatexWriter.WriteUnitEntry(UnitRef : TPasType);
  584. begin
  585. WriteLnF('%s\index{unit!%s} & \pageref{%s} \\',
  586. [EscapeText(UnitRef.Name), EscapeText(UnitRef.Name), StripText(GetLabel(UnitRef))]);
  587. end;
  588. procedure TLatexWriter.EndUnitOverview;
  589. begin
  590. WriteLn('\end{FPCltable}');
  591. end;
  592. Function TLatexWriter.InterPretOption(Const Cmd,Arg : String) : boolean;
  593. begin
  594. Result:=True;
  595. if (cmd= '--latex-highlight') then
  596. LatexHighLight:=True
  597. else if Cmd = '--latex-extension' then
  598. TexExtension:=Arg
  599. else if Cmd = '--image-dir' then
  600. ImageDir:=Arg
  601. else
  602. Result:=False;
  603. end;
  604. initialization
  605. // Do not localize.
  606. RegisterWriter(TLaTeXWriter,'latex','Latex output using fpc.sty class.');
  607. finalization
  608. UnRegisterWriter('latex');
  609. end.