Mercurial > pub > Impl
comparison Lib/IMPL/DOM/Schema.pm @ 383:2f16f13b000c
DOM localization
author | cin |
---|---|
date | Thu, 23 Jan 2014 17:26:34 +0400 |
parents | 99ac2e19c0cc |
children | 5aff94ba842f |
comparison
equal
deleted
inserted
replaced
382:99ac2e19c0cc | 383:2f16f13b000c |
---|---|
27 'IMPL::DOM::Document' => sub { | 27 'IMPL::DOM::Document' => sub { |
28 nodeName => 'schema' | 28 nodeName => 'schema' |
29 } | 29 } |
30 ], | 30 ], |
31 props => [ | 31 props => [ |
32 _TypesMap => PROP_RW | PROP_DIRECT, | 32 _typesMap => PROP_RW | PROP_DIRECT, |
33 baseDir => PROP_RW | PROP_DIRECT, | 33 baseDir => PROP_RW | PROP_DIRECT, |
34 schemaName => PROP_RW | PROP_DIRECT, | 34 schemaName => PROP_RW | PROP_DIRECT, |
35 BaseSchemas => PROP_RO | PROP_DIRECT, | 35 baseSchemas => PROP_RO | PROP_LIST | PROP_DIRECT, |
36 stringMap => { | 36 stringMap => { |
37 get => '_getStringMap', | 37 get => '_getStringMap', |
38 direct => 1 | 38 direct => 1 |
39 } | 39 } |
40 ] | 40 ] |
42 | 42 |
43 my $validatorLoader = Loader->new(prefix => Validator, verifyNames => 1); | 43 my $validatorLoader = Loader->new(prefix => Validator, verifyNames => 1); |
44 | 44 |
45 #TODO rename and remove | 45 #TODO rename and remove |
46 sub resolveType { | 46 sub resolveType { |
47 $_[0]->{$_TypesMap}->{$_[1]} or die IMPL::KeyNotFoundException->new($_[1]); | 47 goto &ResolveType; |
48 } | 48 } |
49 | 49 |
50 sub CTOR { | 50 sub CTOR { |
51 my ($this,%args) = @_; | 51 my ($this,%args) = @_; |
52 | 52 |
53 $this->{$baseDir} = ($args{baseDir} || '.'); | 53 $this->{$baseDir} = ($args{baseDir} || '.'); |
54 } | 54 } |
55 | 55 |
56 # compat | 56 # compat |
57 sub ResolveType { | 57 sub ResolveType { |
58 goto &resolveType | 58 my ($this,$typeName) = @_; |
59 | |
60 my $type = $this->{$_typesMap}{$typeName}; | |
61 return $type if $type; | |
62 | |
63 foreach my $base ($this->baseSchemas) { | |
64 last if $type = $base->resolveType($typeName); | |
65 } | |
66 | |
67 die IMPL::KeyNotFoundException->new($typeName) | |
68 unless $type; | |
69 return $this->{$_typesMap}{$typeName} = $type; | |
59 } | 70 } |
60 | 71 |
61 sub Create { | 72 sub Create { |
62 my ($this,$nodeName,$class,$refArgs) = @_; | 73 my ($this,$nodeName,$class,$refArgs) = @_; |
63 | 74 |
79 | 90 |
80 sub _getStringMap { | 91 sub _getStringMap { |
81 my ($this) = @_; | 92 my ($this) = @_; |
82 | 93 |
83 return $this->{$stringMap} | 94 return $this->{$stringMap} |
84 if return $this->{$stringMap}; | 95 if $this->{$stringMap}; |
85 | 96 |
86 my $map = StringMap->new(); | 97 my $map = StringMap->new(); |
87 if ($this->baseDir and $this->schemaName) { | 98 if ($this->baseDir and $this->schemaName) { |
88 | 99 |
89 $map->paths( File::Spec->catdir($this->baseDir,'locale') ); | 100 $map->paths( File::Spec->catdir($this->baseDir,'locale') ); |
90 $map->name(schemaName); | 101 $map->name( $this->schemaName ); |
91 } | 102 } |
92 | 103 |
93 return $this->{$stringMap} = $map; | 104 return $this->{$stringMap} = $map; |
94 } | 105 } |
95 | 106 |
98 | 109 |
99 # process instructions | 110 # process instructions |
100 $this->Include($_) foreach map $_->nodeProperty('source'), $this->selectNodes('Include'); | 111 $this->Include($_) foreach map $_->nodeProperty('source'), $this->selectNodes('Include'); |
101 | 112 |
102 # build types map | 113 # build types map |
103 $this->{$_TypesMap} = { map { $_->type, $_ } $this->selectNodes(sub { $_[0]->nodeName eq 'ComplexType' || $_[0]->nodeName eq 'SimpleType' } ) }; | 114 $this->{$_typesMap} = { map { $_->type, $_ } $this->selectNodes(sub { $_[0]->nodeName eq 'ComplexType' || $_[0]->nodeName eq 'SimpleType' } ) }; |
104 } | 115 } |
105 | 116 |
106 sub Include { | 117 sub Include { |
107 my ($this,$file) = @_; | 118 my ($this,$file) = @_; |
108 | 119 |
109 my $schema = $this->LoadSchema(File::Spec->catfile($this->baseDir, $file)); | 120 my $schema = $this->LoadSchema(File::Spec->catfile($this->baseDir, $file)); |
110 | 121 |
111 $this->appendRange( $schema->childNodes ); | 122 $this->baseSchemas->Append( $schema ); |
112 } | 123 } |
113 | 124 |
114 sub LoadSchema { | 125 sub LoadSchema { |
115 my ($this,$file) = @_; | 126 my ($this,$file) = @_; |
116 | 127 |