From 7d3d734aab9b20450ffbe13eb690edadd9000187 Mon Sep 17 00:00:00 2001 From: guido Date: Tue, 20 Jul 1999 20:36:07 +0000 Subject: [PATCH] generate database git-svn-id: https://svn.dealii.org/trunk@1610 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/doc/parser/Makefile | 8 ++ deal.II/doc/parser/classtree | 96 +++++++++++++++++ deal.II/doc/parser/dealparse.y | 8 +- deal.II/doc/parser/pass2 | 183 +++++++++++++++++++++++++++++++++ 4 files changed, 294 insertions(+), 1 deletion(-) create mode 100644 deal.II/doc/parser/classtree create mode 100644 deal.II/doc/parser/pass2 diff --git a/deal.II/doc/parser/Makefile b/deal.II/doc/parser/Makefile index 815246a5a9..e3936a0350 100644 --- a/deal.II/doc/parser/Makefile +++ b/deal.II/doc/parser/Makefile @@ -1,3 +1,5 @@ +D = ../.. + dealparse: lex.yy.c dealparse.tab.c g++ -o $@ $^ -lfl @@ -6,3 +8,9 @@ dealparse.tab.h: dealparse.y lex.yy.c: dealparse.l dealparse.tab.h flex $< + +database: dealparse + cat $D/base/include/*/*.h $D/lac/include/*/*.h $D/deal.II/include/*/*.h | dealparse > $@ + +postgres: database + perl pass2 database diff --git a/deal.II/doc/parser/classtree b/deal.II/doc/parser/classtree new file mode 100644 index 0000000000..4b0ec527dd --- /dev/null +++ b/deal.II/doc/parser/classtree @@ -0,0 +1,96 @@ +#!/usr/local/bin/perl -w +# +# $Id$ +# +# Read a class name from stdin and print inheritance +# in both directions. +# + +use DBI; + +$db = DBI->connect('DBI:Pg:dbname=deal;host=gaia','deal','DEAL!!') || + die $DBI::errstr; + +$prefix = " "; + +sub subtree +{ + my $name = shift(@_); + my $direction = shift(@_); + + my $select; + my $result; + + $prefix .= " "; + + if ($direction eq 'up') + { + $select = + $db->prepare('SELECT inherits FROM inheritance WHERE inheritor = ?;'); + $result = $select->execute($name); + if ($result == 0) + { + $name =~ s/<.*//; + $result = $select->execute($name); + } + } else { + $select = + $db->prepare('SELECT inheritor FROM inheritance WHERE inherits = ?;'); + $result = $select->execute($name); + if ($result == 0) + { + $select->finish; + $select = + $db->prepare("SELECT inheritor FROM inheritance WHERE inherits ~ '^$name<';"); + $result = $select->execute; + } + } +# $select->trace(3); + + print STDERR "$prefix$name\n"; + + $name =~ s/_/\\_/g; + $name =~ s//\$>\$/g; + + print "\\begin{bundle}{\\fbox{$name}}%\n" if ($result != 0); + print "\\fbox{$name}%\n" unless ($result != 0); + + my $othername; + $select->bind_columns(undef, \$othername); + while($select->fetch) + { + print '\chunk{'; + subtree($othername, $direction); + print '}'; + } + print '\end{bundle}',"\n" if ($result != 0); + $select->finish; + + chop $prefix; +} + + + +print << 'EOT' +\documentclass{article} +\usepackage{eepic,epic,times} +\usepackage{a4wide,ecltree} +\pagestyle{empty} +\begin{document} +\sffamily +EOT + ; + +while (<>) +{ + chop; + subtree($_,'down'); + print "\n\n"; + subtree($_,'up'); + print "\n\n"; +} + +print '\end{document}',"\n"; + +$db->disconnect; diff --git a/deal.II/doc/parser/dealparse.y b/deal.II/doc/parser/dealparse.y index b79a9cda22..e9aeb960fd 100644 --- a/deal.II/doc/parser/dealparse.y +++ b/deal.II/doc/parser/dealparse.y @@ -120,34 +120,40 @@ variable_declaration: typedef_declaration: TYPEDEF vartype identifier { cout << setw(OUTW) << "@Typedef:" << $3 << endl - << cvs_id << endl + << cvs_id << endl << setw(OUTW) << "@Type:" << $2 << endl + << setw(OUTW) << "@In-Class:" << class_stack.top() << endl << setw(OUTW) << "@Access:" << access_stack.top() << endl; printdoc(cout); } | TYPEDEF vartype '(' '*' identifier ')' argument_declaration { cout << setw(OUTW) << "@Typedef-Functionpointer:" << $4 << endl << setw(OUTW) << "@Type:" << $2<< endl + << setw(OUTW) << "@In-Class:" << class_stack.top() << endl << setw(OUTW) << "@Access:" << access_stack.top() << endl; printdoc(cout); } | TYPEDEF vartype '(' identifier ':' ':' '*' identifier ')' argument_declaration { cout << setw(OUTW) << "@Typedef-Functionpointer:" << $8 << endl << setw(OUTW) << "@Type:" << $2<< endl + << setw(OUTW) << "@In-Class:" << class_stack.top() << endl << setw(OUTW) << "@Access:" << access_stack.top() << endl; printdoc(cout); } | TYPEDEF vartype '(' '*' identifier ')' argument_declaration CONST { cout << setw(OUTW) << "@Typedef-Functionpointer:" << $4 << endl << setw(OUTW) << "@Type:" << $2<< endl + << setw(OUTW) << "@In-Class:" << class_stack.top() << endl << setw(OUTW) << "@Access:" << access_stack.top() << endl; printdoc(cout); } | TYPEDEF vartype '(' identifier ':' ':' '*' identifier ')' argument_declaration CONST { cout << setw(OUTW) << "@Typedef-Functionpointer:" << $8 << endl << setw(OUTW) << "@Type:" << $2<< endl + << setw(OUTW) << "@In-Class:" << class_stack.top() << endl << setw(OUTW) << "@Access:" << access_stack.top() << endl; printdoc(cout); } | TYPEDEF vartype identifier array_dimensions { cout << setw(OUTW) << "@Typedef:" << $3 << endl << cvs_id << endl << setw(OUTW) << "@Type:" << $2 << endl + << setw(OUTW) << "@In-Class:" << class_stack.top() << endl << setw(OUTW) << "@Access:" << access_stack.top() << endl << setw(OUTW) << "@Array-Dimension:" << $4 << endl; printdoc(cout); } diff --git a/deal.II/doc/parser/pass2 b/deal.II/doc/parser/pass2 new file mode 100644 index 0000000000..d0aca399e4 --- /dev/null +++ b/deal.II/doc/parser/pass2 @@ -0,0 +1,183 @@ +#!/usr/local/bin/perl +# +# $Id$ +# +# Enter all names into the postgres database +# +# Variables and Typedefs are missing + +use DBI; + +$docindex = 0; + +open DOCFILE,">tmpdoc" || die "Could not open docfile"; + +$db = DBI->connect('DBI:Pg:dbname=deal;host=gaia','deal','DEAL!!') || + die $DBI::errstr; + +#$db->trace(2); + +$db->do('delete from classes;'); +$db->do('delete from inheritance;'); +$db->do('delete from roots;'); +$db->do('delete from exceptions;'); +$db->do('delete from functions;'); + +$enterclass = $db->prepare('insert into classes (type, name, templates, fullname, scope, access, file, version, documentation) values (?, ?, ?, ?, ?, ?, ?, ?, ?);'); + +$enterinheritance = $db->prepare('insert into inheritance (inheritor, inherits, access) values (?, ?, ?);'); + +$enterroot = $db->prepare('insert into roots (name) values (?);'); + +$enterexception = $db->prepare('insert into exceptions (name, scope, access, arguments, documentation) values (?, ?, ?, ?, ?);'); + +$enterfunction = $db->prepare('insert into functions (type, name, templates, scope, access, file, version, parameters, virtual, const, documentation) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);'); + +#$enterclass->trace(2); + +sub output; + +while(<>) +{ + if(/^\@\@\@/) + { + # Output depending on defined entity + output(); + # Delete all variables + $template_description = ""; + $classname = ""; + $functionname = ""; + $variablename = ""; + $typedef = ""; + $exception = ""; + @inheritance = (); + $inclass = ""; + $function_parameters = ""; + $access = ""; + $array = ""; + $type = ""; + $const = 0; + $virtual = ""; + $file = ""; + $doc = ""; + } + elsif (/\@Template-Description:(.*)/) + { + $template_description = $1; + } + elsif (/\@Class-Definition:(.*)/) + { + ($temp, @inheritance) = split /\@/, $1; + ($type, $classname) = split / /, $temp, 2; + } + elsif (/\@In-Class:(.*)/) + { + $inclass = $1; + $inclass =~ s/^:://; + } + elsif (/\@Function-Definition:(.*)/) + { + $functionname = $1; + } + elsif (/\@Variable-Declaration:(.*)/) + { + $variablename = $1; + } + elsif (/\@DeclException(.):(.*)/) + { + $exception = $2; + $exceptionargs = $1; + } + elsif (/\@Typedef(-Functionpointer)?:(.*)/) + { + $typedef = $2; + } + elsif (/\@Function-Parameters:(.*)/) + { + $function_parameters = $1; + } + elsif (/\@Access:(.*)/) + { + $access = $1; + } + elsif (/\@Array-Dimension:(.*)/) + { + $array = $1; + } + elsif (/\@(Return-)?Type:(.*)/) + { + $type = $2; + } + elsif (/\@Const:(.*)/) + { + $const = 1; + } + elsif (/\@Virtual:(.*)/) + { + $virtual = $1; + } + elsif (/^\s*\@/) + { +# print; + } + elsif (/^\s*\$(Id:)\s*(\S+)\s+(\S+)/) + { + $file = $2; + $version = $3; + $file =~ s/,v//; + } + elsif (/\s*\*/) + { + s/\s*\* ?//; + $doc .= $_; + } +} + +$enterclass->finish; +$enterinheritance->finish; +$db->disconnect; + +sub output +{ + if ($classname) + { + print STDERR '.'; +# print $type, ' '; +# print $inclass, '::' if ($inclass); +# print $classname, " $file $version\n"; + $fullname = ""; + $fullname = $inclass . '::' if ($inclass); + $fullname .= $classname; + $enterclass->execute($type, $classname, $template_description, $fullname, $inclass, + $access, $file, $version, $docindex); + + print DOCFILE "\@\@\@$docindex\n$doc\n"; + $docindex++; + + foreach (@inheritance) + { + m/\s*(\w+)\s+(.*)/; + $enterinheritance->execute($fullname, $2, $1); + } + $enterroot->execute($fullname) unless (@inheritance); + } + elsif($exception) + { + $enterexception->execute($exception, $inclass, $access, + $exceptionargs, $docindex); + + print DOCFILE "\@\@\@$docindex\n$doc\n"; + $docindex++; + } + elsif ($functionname) + { + $enterfunction->execute($type, $functionname, $template_description, + $inclass, $access, $file, $version, + $function_parameters, + $virtual, ($const) ? 't' : 'f', $docindex); + + print DOCFILE "\@\@\@$docindex\n$doc\n"; + $docindex++; + } +} + -- 2.39.5