summaryrefslogtreecommitdiffstats
path: root/addon/perlmod
diff options
context:
space:
mode:
Diffstat (limited to 'addon/perlmod')
-rw-r--r--addon/perlmod/DoxyModel.pm102
-rw-r--r--addon/perlmod/README43
-rw-r--r--addon/perlmod/doxydocs-latex.pl108
-rw-r--r--addon/perlmod/doxytemplate-latex.pl28
4 files changed, 281 insertions, 0 deletions
diff --git a/addon/perlmod/DoxyModel.pm b/addon/perlmod/DoxyModel.pm
new file mode 100644
index 0000000..10454b9
--- /dev/null
+++ b/addon/perlmod/DoxyModel.pm
@@ -0,0 +1,102 @@
+sub section($$) {
+ my ($wrap, $name) = @_;
+ my $prefix = "Doxy" . $name;
+ return
+ [ "hash", "Doxy" . $wrap,
+ {
+ members =>
+ [ "list", $prefix . "s",
+ [ "hash", $prefix,
+ {
+ kind => [ "field", $prefix . "Kind" ],
+ name => [ "field", $prefix . "Name" ],
+ virtualness => [ "field", $prefix . "Virtualness" ],
+ protection => [ "field", $prefix . "Protection" ],
+ type => [ "field", $prefix . "Type" ],
+ parameters =>
+ [ "list", $prefix . "Params",
+ [ "hash", $prefix . "Param",
+ {
+ declaration_name => [ "field", $prefix . "ParamName" ],
+ type => [ "field", $prefix . "ParamType" ],
+ },
+ ],
+ ],
+ detailed =>
+ [ "hash", $prefix . "Detailed",
+ {
+ doc => [ "doc", $prefix . "DetailedDoc" ],
+ return => [ "doc", $prefix . "Return" ],
+ see => [ "doc", $prefix . "See" ],
+ params =>
+ [ "list", $prefix . "PDBlocks",
+ [ "hash", $prefix . "PDBlock",
+ {
+ parameters =>
+ [ "list", $prefix . "PDParams",
+ [ "hash", $prefix . "PDParam",
+ {
+ name => [ "field", $prefix . "PDParamName" ],
+ },
+ ],
+ ],
+ doc => [ "doc", $prefix . "PDDoc" ],
+ },
+ ],
+ ],
+ },
+ ],
+ },
+ ],
+ ],
+ },
+ ];
+}
+
+$doxymodel =
+ [ "hash", "DoxyTop",
+ {
+ files =>
+ [ "list", "DoxyFiles",
+ [ "hash", "DoxyFile",
+ {
+ name => [ "field", "DoxyFileName" ],
+ typedefs => section("FileTypedefs", "Typedef"),
+ variables => section("FileVariables", "Variable"),
+ functions => section("FileFunctions", "Function"),
+ detailed =>
+ [ "hash", "DoxyFileDetailed",
+ {
+ doc => [ "doc", "DoxyFileDetailedDoc" ],
+ },
+ ],
+ },
+ ],
+ ],
+ classes =>
+ [ "list", "DoxyClasses",
+ [ "hash", "DoxyClass",
+ {
+ name => [ "field", "DoxyClassName" ],
+ public_typedefs => section("ClassPublicTypedefs", "Typedef"),
+ public_methods => section("ClassPublicMethods", "Function"),
+ public_members => section("ClassPublicMembers", "Variable"),
+ protected_typedefs => section("ClassProtectedTypedefs", "Typedef"),
+ protected_methods => section("ClassProtectedMethods", "Function"),
+ protected_members => section("ClassProtectedMembers", "Variable"),
+ private_typedefs => section("ClassPrivateTypedefs", "Typedef"),
+ private_methods => section("ClassPrivateMethods", "Function"),
+ private_members => section("ClassPrivateMembers", "Variable"),
+ detailed =>
+ [ "hash", "DoxyClassDetailed",
+ {
+ doc => [ "doc", "DoxyClassDetailedDoc" ],
+ },
+ ],
+ },
+ ],
+ ],
+ },
+ ];
+
+1;
diff --git a/addon/perlmod/README b/addon/perlmod/README
new file mode 100644
index 0000000..0938474
--- /dev/null
+++ b/addon/perlmod/README
@@ -0,0 +1,43 @@
+DoxyModel.pm: it is a Perl module with information about the structure
+of DoxyDocs.pm files. It is used by Perl scripts that process the
+output generated by the Perl backend.
+
+doxydocs-latex.pl: it is a Perl script which uses DoxyModel.pm and a
+generated DoxyDocs.pm to create the file doxydocs.tex. This file
+contains the documentation, this time in "TeX" format. doxydocs.tex,
+however, can't been directly LaTeX'ed.
+
+doxydocs-latex.ltx: this is the LaTeX file which is LaTeX'ed to
+generate the PDF or DVI documentation. It includes doxydocs.tex,
+generated by doxydocs-latex.pl above, and doxytemplate.tex, generated
+by doxytemplate-latex.pl -- see below. This file is intended to be
+customized by users if they want to modify the format of the PDF or
+DVI output.
+
+doxytemplate-latex.pl: this is a Perl script which uses DoxyModel.pm
+to generate a doxytemplate.tex TeX file. This file is included by
+doxydocs-latex.ltx to maintain the compatibility with future versions
+of Doxygen; i.e. a customized doxydocs-latex.ltx should work with the
+output generated by future versions of Doxygen as long as it includes
+an updated doxydocs.tex.
+
+So what do you do to test my backend?
+
+1. You apply perlgen.diff and rebuild Doxygen.
+2. You save DoxyModel.pm, doxydocs-latex.pl, doxytemplate-latex.pl and
+doxydocs-latex.ltx to your test directory.
+3. You run doxytemplate-latex.pl to generate doxytemplate.tex.
+4. You generate DoxyDocs.pm by running Doxygen on the test code. (You
+must enable the GENERATE_PERL option in your Doxyfile).
+5. You run doxydocs-latex.pl to generate doxydocs.tex from
+DoxyDocs.pm.
+6. You run pdflatex on doxydocs-latex.ltx to generate
+doxydocs-latex.pdf from doxydocs.tex and doxytemplate.tex.
+
+If you want to regenerate the PDF output after modifying the test code
+you only need to do the steps from 4 on.
+
+I also attach a main.h file I've used to test my backend and the
+corresponding main.pdf file I've generated from it.
+
+
diff --git a/addon/perlmod/doxydocs-latex.pl b/addon/perlmod/doxydocs-latex.pl
new file mode 100644
index 0000000..c60ff65
--- /dev/null
+++ b/addon/perlmod/doxydocs-latex.pl
@@ -0,0 +1,108 @@
+#!/usr/bin/perl
+# Copyright (C) 1997-2002 by Dimitri van Heesch.
+# Author: Miguel Lobo.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation under the terms of the GNU General Public License is hereby
+# granted. No representations are made about the suitability of this software
+# for any purpose. It is provided "as is" without express or implied warranty.
+# See the GNU General Public License for more details.
+#
+# Documents produced by Doxygen are derivative works derived from the
+# input used in their production; they are not affected by this license.
+
+# This script can be used to generate LaTeX output using the new Perl
+# intermediate format. It is incomplete and experimental, so for the moment
+# you should use Doxygen"s standard LaTeX output.
+#
+# If you want to try this out, you should do:
+# doxygen configName # This creates DoxyDocs.pm
+# perl -I. doxydocs-latex.pl # This creates doxydocs.tex and doxytemplate.tex
+# latex doxydocs-latex.ltx # This creates doxydocs-latex.dvi
+#
+# Notes:
+# - Your config file has to have Perl output enabled, of course.
+# - The Perl output format is only complete enough to document
+# a simple C file; no classes by the moment :-).
+
+use DoxyModel;
+use DoxyDocs;
+
+sub latex_quote($) {
+ my $text = $_[0];
+ $text =~ s/[\\_&]/\\$&/g;
+ print TEXDOCS $text;
+}
+
+sub generate_doc($) {
+ my $doc = $_[0];
+ for my $item (@$doc) {
+ my $type = $$item{type};
+ if ($type eq "text") {
+ latex_quote($$item{content});
+ } elsif ($type eq "para") {
+ generate_doc($$item{content});
+# print TEXDOCS "\\par\n";
+ } elsif ($type eq "bold") {
+ print TEXDOCS "\\textbf{";
+ generate_doc($$item{content});
+ print TEXDOCS "}";
+ } elsif ($type eq "emphasis") {
+ print TEXDOCS "\\textit{";
+ generate_doc($$item{content});
+ print TEXDOCS "}";
+ } elsif ($type eq "url") {
+ latex_quote($$item{content});
+ }
+ }
+}
+
+sub generate($$) {
+ my ($item, $model) = @_;
+ my ($type, $name) = @$model[0, 1];
+ if ($type eq "field") {
+ print TEXDOCS "\\" . $name . "{";
+ latex_quote($item);
+ print TEXDOCS "}";
+ } elsif ($type eq "doc") {
+ if (@$item) {
+ print TEXDOCS "\\" . $name . "{";
+ generate_doc($item);
+ print TEXDOCS "}%\n";
+ } else {
+ print TEXDOCS "\\" . $name . "Empty%\n";
+ }
+ } elsif ($type eq "hash") {
+ my ($key, $value);
+ while (($key, $submodel) = each %{$$model[2]}) {
+ my $name = $$submodel[1];
+ print TEXDOCS "\\def\\f" . $name . "{";
+ if ($$item{$key}) {
+ generate($$item{$key}, $submodel);
+ } else {
+ print TEXDOCS "\\" . $name . "Empty";
+ }
+ print TEXDOCS "}%\n";
+ }
+ print TEXDOCS "\\" . $name . "%\n";
+ } elsif ($type eq "list") {
+ my $index = 0;
+ if (@$item) {
+ print TEXDOCS "\\" . $name . "{%\n";
+ for my $subitem (@$item) {
+ if ($index) {
+ print TEXDOCS "\\" . $name . "Sep%\n";
+ }
+ generate($subitem, $$model[2]);
+ $index++;
+ }
+ print TEXDOCS "}%\n";
+ } else {
+ print TEXDOCS "\\" . $name . "Empty%\n";
+ }
+ }
+}
+
+open TEXDOCS, ">doxydocs.tex";
+generate($doxydocs, $doxymodel);
+close TEXDOCS;
diff --git a/addon/perlmod/doxytemplate-latex.pl b/addon/perlmod/doxytemplate-latex.pl
new file mode 100644
index 0000000..8caddf6
--- /dev/null
+++ b/addon/perlmod/doxytemplate-latex.pl
@@ -0,0 +1,28 @@
+use DoxyModel;
+
+sub template($) {
+ my $model = $_[0];
+ my ($type, $name) = @$model[0, 1];
+ if ($type eq "field") {
+ print TEXTEMPLATE "\\def\\" . $name . "#1{#1}%\n";
+ } elsif ($type eq "doc") {
+ print TEXTEMPLATE "\\def\\" . $name . "#1{#1}%\n";
+ } elsif ($type eq "hash") {
+ my ($key, $value);
+ while (($key, $submodel) = each %{$$model[2]}) {
+ my $subname = $$submodel[1];
+ print TEXTEMPLATE "\\def\\" . $subname . "Empty{}%\n";
+ print TEXTEMPLATE "\\def\\f" . $subname . "Empty{\\" . $subname . "Empty}%\n";
+ template($submodel);
+ }
+ print TEXTEMPLATE "\\def\\" . $name . "{}%\n";
+ } elsif ($type eq "list") {
+ template($$model[2]);
+ print TEXTEMPLATE "\\def\\" . $name . "#1{#1}%\n";
+ print TEXTEMPLATE "\\def\\" . $name . "Sep{}%\n";
+ }
+}
+
+open TEXTEMPLATE, ">doxytemplate.tex";
+template($doxymodel);
+close TEXTEMPLATE;