From 35c90a5b582f0d40a122b151580e313c2b157b6f Mon Sep 17 00:00:00 2001 From: joey Date: Sat, 29 Jul 2006 20:01:29 +0000 Subject: "Viva l'Italia!" * Polygen plugin from Enrico. --- IkiWiki/Plugin/polygen.pm | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 IkiWiki/Plugin/polygen.pm (limited to 'IkiWiki/Plugin/polygen.pm') diff --git a/IkiWiki/Plugin/polygen.pm b/IkiWiki/Plugin/polygen.pm new file mode 100644 index 000000000..c14889167 --- /dev/null +++ b/IkiWiki/Plugin/polygen.pm @@ -0,0 +1,56 @@ +#!/usr/bin/perl +# +# Include polygen output in a page +# +# by Enrico Zini +package IkiWiki::Plugin::polygen; + +use warnings; +use strict; +use IkiWiki; +use File::Find; + +sub import { #{{{ + IkiWiki::hook(type => "preprocess", id => "polygen", + call => \&preprocess); +} # }}} + +sub preprocess (@) { #{{{ + my %params=@_; + my $grammar = ($params{grammar} or 'polygen'); + my $symbol = ($params{symbol} or undef); + + # Sanitize parameters + $grammar =~ IkiWiki::basename($grammar); + $grammar =~ s/\.grm$//; + $grammar .= '.grm'; + $symbol =~ s/[^A-Za-z0-9]//g if defined $symbol; + + my $grmfile = '/usr/share/polygen/ita/polygen.grm'; + find({wanted => sub { + if (substr($File::Find::name, -length($grammar)) eq $grammar) { + $grmfile = IkiWiki::possibly_foolish_untaint($File::Find::name); + } + }, + no_chdir => 1, + }, '/usr/share/polygen'); + + my $res; + if (defined $symbol) { + $res = `polygen -S $symbol $grmfile 2>/dev/null`; + } + else { + $res = `polygen $grmfile 2>/dev/null`; + } + + if ($?) { + $res="[[polygen failed]]"; + } + + # Strip trainling spaces and newlines so that we flow well with the + # markdown text + $res =~ s/\s*$//; + return $res; +} # }}} + +1 -- cgit v1.2.3