forked from eprints/eprints
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxml_parse.pl
executable file
·104 lines (87 loc) · 1.14 KB
/
xml_parse.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/usr/bin/perl -w
my $file = join( '', <> );
while( $file ne "" )
{
if( $file =~ s/^([^<]+)//s )
{
text( $1 );
next;
}
if( $file =~ s/^<\?(.*)\?>//s )
{
pdir( $1 );
next;
}
if( $file =~ s/^<!--(.*)-->//s )
{
comment( $1 );
next;
}
if( $file =~ s/<(([^>'"]*|"[^"]*"|'[^']*')+)>//s )
{
tag( $1 );
next;
}
print "DAMN:$file\n";
exit;
}
sub text
{
my( $val ) = @_;
$val = "\U$val";
print $val;
}
sub pdir
{
print "<?".$_[0]."?>";
}
sub comment
{
print "<!--".$_[0]."-->";
}
sub tag
{
my $tag = $_[0];
if( $tag =~ m/^\// )
{
print "<$tag>";
return;
}
print "<";
$tag =~ s/^([^\s>]+)//;
print $1;
while( $tag ne "" )
{
next if( $tag=~s/^\s// );
if( $tag=~s/^([^\s=]+)\s*=\s*'([^']+)'// )
{
sattr( $1, $2 );
next;
}
if( $tag=~s/^([^\s=]+)\s*=\s*"([^"]+)"// )
{
dattr( $1, $2 );
next;
}
if( $tag=~s/^\/// )
{
print "/";
next;
}
print "DAMN! --($tag)--\n";
exit;
}
print ">";
}
sub sattr
{
my( $name, $val ) = @_;
$val = "\U$val";
print " ".$name."='(".$val.")'";
}
sub dattr
{
my( $name, $val ) = @_;
$val = "\U$val";
print " ".$name.'="('.$val.')"';
}