From: Chris Mungall Date: Tue, 21 Mar 2006 20:07:21 +0000 (+0000) Subject: new: makes tables in latex format X-Git-Tag: v0.11008~454 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=fae069ed2441440c3a8134cf775bd332c61746fe;p=dbsrgits%2FSQL-Translator.git new: makes tables in latex format --- diff --git a/lib/SQL/Translator/Producer/Latex.pm b/lib/SQL/Translator/Producer/Latex.pm new file mode 100644 index 0000000..17fc18e --- /dev/null +++ b/lib/SQL/Translator/Producer/Latex.pm @@ -0,0 +1,123 @@ +package SQL::Translator::Producer::Latex; + +# ------------------------------------------------------------------- +# $Id: Latex.pm,v 1.1 2006-03-21 20:07:21 cmungall Exp $ +# ------------------------------------------------------------------- +# Copyright (C) 2002-6 SQLFairy Authors +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; version 2. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +# 02111-1307 USA +# ------------------------------------------------------------------- + +=pod + +=head1 NAME + +SQL::Translator::Producer::Latex - + Produces latex formatted tables ready for import from schema. + +=head1 SYNOPSIS + + use SQL::Translator; + my $translator = SQL::Translator->new( + from => 'MySQL', + filename => 'foo_schema.sql', + to => 'Latex', + ); + print $translator->translate; + +=head1 DESCRIPTION + +Currently you will get one class (with the a table +stereotype) generated per table in the schema. The fields are added as +attributes of the classes and their datatypes set. It doesn't currently set any +of the relationships. It doesn't do any layout, all the classses are in one big +stack. However it is still useful as you can use the layout tools in Dia to +automatically arrange them horizontally or vertically. + +=head2 Producer Args + +=over 4 + +=back + +=cut + +# ------------------------------------------------------------------- + +use strict; + +use vars qw[ $DEBUG $VERSION @EXPORT_OK ]; +$VERSION = sprintf "%d.%02d", q$Revision: 1.1 $ =~ /(\d+)\.(\d+)/; +$DEBUG = 0 unless defined $DEBUG; + +use SQL::Translator::Utils 'debug'; + +sub produce { + my $translator = shift; + my $schema = $translator->schema; + my $o = ''; + for my $table ( $schema->get_tables ) { + my $table_name = $table->name or next; + my $n = latex($table_name); + $o .= + sprintf ' +\subsubsection{%s} +%s +\begin{table}[htb] +\caption{%s} +\label{tab:%s} +\center +{ \small + \begin{tabular}{l l p{8cm}} + Column & Datatype & Description \\\\ \hline +', + $n, latex($table->comments), $n, $table_name; + + foreach my $f ($table->get_fields) { + $o .= sprintf '%s & %s & %s \\\\', map {latex($_)} ($f->name, $f->data_type, $f->comments || ''); + $o .= "\n"; + + } +$o .= sprintf ' +\end{tabular} +} +\end{table} +\clearpage +'; + } + return $o; +} +sub latex { + my $s = shift; + return '' unless defined $s; + $s =~ s/([\&\_\$\{\#])/\\$1/g; + return $s; +} + +1; + +# ------------------------------------------------------------------- + +=pod + +=head1 AUTHOR + +Chris Mungall + +=head1 SEE ALSO + +SQL::Translator. + +=cut