common/tools/sysModelFilter.pl
author Simon Howkins <simonh@symbian.org>
Wed, 27 Oct 2010 16:22:14 +0100
changeset 1316 0b4a09013baf
parent 457 991d89a55c87
permissions -rw-r--r--
Added copyright messages
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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