]> git.lyx.org Git - lyx.git/blob - development/autotests/filterXml4Sax.pl
ctests: log a waste and a success
[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', 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 if ($err > 0) {
34   die(join('', @errors));
35 }
36 exit(0);
37
38 #########################################################################
39 sub convert($)
40 {
41   my ($l) = @_;
42   if ($l =~ /^(.*)\<(\/?[a-zA-Z]+(:[a-zA-Z]+)?)([^\>\<]*)\>(.*)$/) {
43     my ($prev,$tag,$para,$rest) = ($1,$2,$4,$5);
44     $prev = &convert($prev);
45     $rest = &convert($rest);
46     if ($para !~ /^\s*\/?$/) {
47       if ($para !~ /^\s+[a-z]+(:[a-z]+)?\s*=/) {
48         $para =~ s/[^a-z_]/_/g;
49       }
50       else {
51         $para = " " . &handlePara($para);
52       }
53     }
54     if ($para =~ s/\s*\/$//) {
55       return "$prev<$tag$para\>\</$tag\>$rest";
56     }
57     else {
58       return "$prev<$tag$para>$rest";
59     }
60   }
61   else {
62     return($l);
63   }
64 }
65
66 sub handlePara($)
67 {
68   my ($para) = @_;
69   if ($para =~ /^\s*([a-z]+(:[a-z]+)?)\s*=\s*(.*)$/) {
70     my $val;
71     my ($p, $rest) = ($1, $3);
72     if ($rest =~ /^(\'([^\']|\\\')*\')(.*)$/) {
73       $val = $1;
74       $rest = $3;
75     }
76     elsif ($rest =~ /^(\"([^\"]|\\\")*\")(.*)$/) {
77       $val = $1;
78       $rest = $3;
79     }
80     elsif ($rest =~ /^([^\s]+)(.*)$/) {
81       my $val1 = $1;
82       $rest = $2;
83       $val1 =~ s/([\"\'\\])/\\$1/g;
84       $val = '"' . $val1 . '"';
85     }
86     else {
87       die("param error for rest = $rest");
88     }
89     if ($rest !~ /^\s*$/) {
90       return "$p=$val " . &handlePara($rest);
91     }
92     else {
93       return "$p=$val";
94     }
95   }
96   return $para;
97 }