author | Simon Howkins <simonh@symbian.org> |
Wed, 27 Oct 2010 16:22:14 +0100 | |
changeset 1316 | 0b4a09013baf |
parent 457 | 991d89a55c87 |
permissions | -rw-r--r-- |
457
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
1 |
#!perl -w |
1316
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
2 |
# Copyright (c) 2009 Symbian Foundation Ltd |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
3 |
# This component and the accompanying materials are made available |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
4 |
# under the terms of the License "Eclipse Public License v1.0" |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
5 |
# which accompanies this distribution, and is available |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
6 |
# at the URL "http://www.eclipse.org/legal/epl-v10.html". |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
7 |
# |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
8 |
# Initial Contributors: |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
9 |
# Symbian Foundation Ltd - initial contribution. |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
10 |
# |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
11 |
# Contributors: |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
12 |
# |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
13 |
# Description: |
0b4a09013baf
Added copyright messages
Simon Howkins <simonh@symbian.org>
parents:
457
diff
changeset
|
14 |
# Removes items from an XML document according to filter attributes, and specified filters |
457
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
15 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
16 |
use strict; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
17 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
18 |
use XML::Parser; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
19 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
20 |
my $sysModel = shift or die "First arg must be system model xml file"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
21 |
my @filters = @ARGV or die "Subsequent arg(s) must be filter(s) to apply"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
22 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
23 |
# Sort out the positive and negative filters specified |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
24 |
my @negativeFilters; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
25 |
my @positiveFilters; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
26 |
foreach my $filter (@filters) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
27 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
28 |
if ($filter =~ m{^!(.*)}) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
29 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
30 |
push @negativeFilters, $1; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
31 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
32 |
else |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
33 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
34 |
push @positiveFilters, $filter; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
35 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
36 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
37 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
38 |
# Read input tree |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
39 |
my $parser = new XML::Parser(Style => "Objects") or die; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
40 |
my $sysTree = eval { $parser->parsefile($sysModel) } or die "Failed to parse $sysModel : $@"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
41 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
42 |
# Apply filter |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
43 |
filterTree($sysTree->[0], \@negativeFilters, \@positiveFilters); |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
44 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
45 |
# Output total tree |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
46 |
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
47 |
printTree($sysTree->[0]); |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
48 |
print "\n"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
49 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
50 |
exit; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
51 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
52 |
sub filterTree |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
53 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
54 |
my $tree = shift; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
55 |
my $negativeFilters = shift; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
56 |
my $positiveFilters = shift; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
57 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
58 |
if (exists $tree->{filter}) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
59 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
60 |
# Work out how this item in the tree is tagged for filtering |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
61 |
my $itemTags = [split ",", $tree->{filter}]; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
62 |
my @negativeTags; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
63 |
my @positiveTags; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
64 |
foreach my $tag (@$itemTags) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
65 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
66 |
if ($tag =~ m{^!(.*)}) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
67 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
68 |
push @negativeTags, $1; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
69 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
70 |
else |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
71 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
72 |
push @positiveTags, $tag; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
73 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
74 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
75 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
76 |
# Test whether this item should be removed |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
77 |
if (intersect(\@positiveTags, $negativeFilters) || |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
78 |
intersect(\@negativeTags, $positiveFilters) ) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
79 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
80 |
# It should! |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
81 |
# Return false, and the removal will be executed by the |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
82 |
# calling instance |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
83 |
# (No need to examine children) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
84 |
return 0; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
85 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
86 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
87 |
# Tidy up the filter attribute |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
88 |
# Remove tags from this item that have been "used up" |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
89 |
# Remove the filter attribute entirely if they have all been |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
90 |
# used up |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
91 |
my %filterLookup = map { $_ => 1 } (@$negativeFilters, @$positiveFilters); |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
92 |
@$itemTags = grep { !exists $filterLookup{$_} } @$itemTags; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
93 |
if (scalar @$itemTags) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
94 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
95 |
$tree->{filter} = join ",", @$itemTags; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
96 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
97 |
else |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
98 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
99 |
delete $tree->{filter}; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
100 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
101 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
102 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
103 |
# Now iterate through the children of this item and remove any that |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
104 |
# should be filtered out |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
105 |
@{$tree->{Kids}} = grep { |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
106 |
filterTree($_, $negativeFilters, $positiveFilters) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
107 |
} @{$tree->{Kids}}; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
108 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
109 |
# Return true so that the calling instance will preserve this item in |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
110 |
# the output tree |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
111 |
return 1; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
112 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
113 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
114 |
# Test whether two sets (arrays) intersect |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
115 |
sub intersect |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
116 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
117 |
my $set1 = shift; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
118 |
my $set2 = shift; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
119 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
120 |
my %set1 = map { $_ => 1 } @$set1; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
121 |
foreach (@$set2) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
122 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
123 |
return 1 if exists $set1{$_}; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
124 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
125 |
return 0; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
126 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
127 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
128 |
sub printTree |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
129 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
130 |
my $tree = shift or die; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
131 |
die unless ref $tree; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
132 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
133 |
my $tagName = ref $tree; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
134 |
$tagName =~ s{^main::}{}; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
135 |
if ($tagName eq "Characters") |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
136 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
137 |
print $tree->{Text}; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
138 |
return; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
139 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
140 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
141 |
print "<$tagName"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
142 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
143 |
foreach my $attr ( |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
144 |
sort { |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
145 |
my $order = "unofficial name long-name tech_domain level span schema levels filter introduced deprecated purpose class plugin origin-model bldFile mrp version priority"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
146 |
my $ixA = 1 + index $order, $a or die $a; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
147 |
my $ixB = 1 + index $order, $b or die $b; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
148 |
$ixA - $ixB; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
149 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
150 |
grep { |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
151 |
! ref $tree->{$_} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
152 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
153 |
keys %$tree) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
154 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
155 |
print " $attr=\"$tree->{$attr}\""; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
156 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
157 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
158 |
my $children = $tree->{Kids}; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
159 |
if (scalar @$children) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
160 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
161 |
print ">"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
162 |
foreach my $child (@$children) |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
163 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
164 |
printTree($child); |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
165 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
166 |
print "</$tagName"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
167 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
168 |
else |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
169 |
{ |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
170 |
print "/" |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
171 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
172 |
|
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
173 |
print ">"; |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
174 |
} |
991d89a55c87
Tool for filtering a system model definition.
Simon Howkins <simonh@symbian.org>
parents:
diff
changeset
|
175 |