]> git.lyx.org Git - lyx.git/blob - development/autotests/filterXml4Sax.pl
Cmake export tests: Export to docbook5
[lyx.git] / development / autotests / filterXml4Sax.pl
1 #! /usr/bin/env perl
2
3 use strict;
4 use File::Temp qw/ tempfile tempdir /;
5
6 sub convert($);
7 sub handlePara($);
8
9 die("No xml file specified") if (! defined($ARGV[0]));
10 my $f = $ARGV[0];
11 die("Bad extension of $f") if ($f !~ /\.xml$/);
12 die("Could not read $f") if (!open(FI, $f));
13 my ($fh, $filename) = tempfile("tempXXXX", SUFFIX => '.xml', DIR => '/tmp', UNLINK => 0);
14 while (my $l = <FI>) {
15   chomp($l);
16   $l = convert($l);
17   print $fh "$l\n";
18 }
19 close(FI);
20 close($fh);
21 my $err = 0;
22 my @errors = ();
23 if (open(FI, "xmllint --sax $filename|")) {
24   while (my $l = <FI>) {
25     print $l;
26   }
27 }
28 else {
29   $err = 1;
30   @errors = ("Could not run xmllint\n");
31 }
32 #unlink($filename);
33 print "Not unlinking $filename\n";
34 if ($err > 0) {
35   die(join('', @errors));
36 }
37 exit(0);
38
39 #########################################################################
40 sub convert($)
41 {
42   my ($l) = @_;
43   if ($l =~ /^(.*)\<(\/?[a-zA-Z]+(:[a-zA-Z]+)?)([^\>\<]*)\>(.*)$/) {
44     my ($prev,$tag,$para,$rest) = ($1,$2,$4,$5);
45     $prev = &convert($prev);
46     $rest = &convert($rest);
47     if ($para !~ /^\s*\/?$/) {
48       if ($para !~ /^\s+[a-z]+(:[a-z]+)?\s*=/) {
49         $para =~ s/[^a-z_]/_/g;
50       }
51       else {
52         $para = " " . &handlePara($para);
53       }
54     }
55     if ($para =~ s/\s*\/$//) {
56       return "$prev<$tag$para\>\</$tag\>$rest";
57     }
58     else {
59       return "$prev<$tag$para>$rest";
60     }
61   }
62   else {
63     return($l);
64   }
65 }
66
67 sub handlePara($)
68 {
69   my ($para) = @_;
70   if ($para =~ /^\s*([a-z]+(:[a-z]+)?)\s*=\s*(.*)$/) {
71     my $val;
72     my ($p, $rest) = ($1, $3);
73     if ($rest =~ /^(\'[^\']*\')(.*)$/) {
74       $val = $1;
75       $rest = $2;
76     }
77     elsif ($rest =~ /^(\"[^\"]*\")(.*)$/) {
78       $val = $1;
79       $rest = $2;
80     }
81     elsif ($rest =~ /^([^\s]+)(.*)$/) {
82       $val = '"' . $1 . '"';
83       $rest = $2;
84     }
85     else {
86       die("param error for rest = $rest");
87     }
88     if ($rest !~ /^\s*$/) {
89       return "$p=$val " . &handlePara($rest);
90     }
91     else {
92       return "$p=$val";
93     }
94   }
95   return $para;
96 }