dw_latex.pp 17 KB

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