#!/usr/bin/perl -w use strict; # Copyright (C) 2006, HELM Team. # # This file is part of HELM, an Hypertextual, Electronic # Library of Mathematics, developed at the Computer Science # Department, University of Bologna, Italy. # # HELM 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; either version 2 # of the License, or (at your option) any later version. # # HELM 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 HELM; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA. # # For details, see the HELM World-Wide-Web page, # http://helm.cs.unibo.it/ use CGI; use Syntax::Highlight::Universal; # Configuration my $documentroot = '/projects/matita/public_html/'; my $protohrc = $documentroot . 'helm-proto.hrc'; my $scriptsdir = $documentroot . 'library/'; my %formatmap = ( '.ma' => 'grafite', '.c' => 'c', # debug ); # Code my $query = CGI->new; # used globally by some 'sub' below print $query->header(-type=>'text/html', -charset=>'utf-8'); sub die_invalid_file() { print $query->start_html; print 'Invalid script.'; print $query->end_html; exit 0; } sub lookup_script($) { my ($f) = @_; die_invalid_file() unless $f =~ /^(.*)(\.[^.]+)$/; my $base = $1; my $extension = $2; die_invalid_file() unless $base =~ /[-a-zA-Z_]+(\/[-a-zA-Z_])*/; die_invalid_file() unless exists $formatmap{$extension}; my $path = $scriptsdir . $f; die_invalid_file() unless -f $path; return ($path, $formatmap{$extension}); } my $fname = $query->param('f'); my $highlighter = Syntax::Highlight::Universal->new; $highlighter->addConfig($protohrc); my ($script, $format) = lookup_script($fname); open SCRIPT, "< $script" or die "Can't open Matita script \"$script\"\n"; my @lines =