gstreamer/examples/manual/extract.pl
Thomas Vander Stichele c1ab023379 Make it possible to extract example code from separate blocks.
Original commit message from CVS:
* docs/manual/dynamic.xml:
* docs/manual/elements-api.xml:
* docs/manual/gnome.xml:
* docs/manual/helloworld2.xml:
* docs/manual/init-api.xml:
* docs/manual/queues.xml:
* docs/manual/threads.xml:
* docs/manual/xml.xml:
* examples/manual/extract.pl:
Make it possible to extract example code from separate blocks.
Should make Ronald happy.
2004-12-15 11:29:14 +00:00

78 lines
1.4 KiB
Perl
Executable file

#!/usr/bin/perl
# extract code fragments from xml program listings
# first argument: source code file to find
# second argument: xml files to extract code from
# main
# decodes xml by translating & < > back to what they should be
# and also ignore
# <![CDATA[
# and
# ]]>
sub
xml_decode ($)
{
my $input = shift;
$input =~ s/\&amp;/&/g;
$input =~ s/&lt;/</g;
$input =~ s/&gt;/>/g;
if ($input =~ /<!\[CDATA\[/) { $input = ""; }
if ($input =~ /]]>/) { $input = ""; }
#print "Returning line $input";
return $input;
}
# main
my $output = shift @ARGV;
$found = 0;
%blocks = ();
foreach $file (@ARGV)
{
open FILE, $file or die "Cannot open file $file";
while ($line = <FILE>)
{
if ($line =~ /<!-- example-begin $output (.*) -->/)
{
$found = 1;
$block_id = $1;
$block = "\n/*** block $block_id from $file ***/\n";
print "Extracting $output block $block_id from $file\n";
while ($line = <FILE>)
{
if ($line =~ /<!-- example-end $output (.*) -->/)
{
last;
}
$block .= xml_decode ($line);
}
$blocks{$block_id} = $block;
}
}
}
if (!$found)
{
print "Could not find $output example !\n";
exit(1);
}
# now output all the blocks in the right order
open OUTPUT, ">$output";
@block_ids = keys %blocks;
foreach $block_id (sort @block_ids)
{
print "Writing block with id $block_id\n";
print OUTPUT $blocks{$block_id};
}
close OUTPUT;