source: josm/trunk/tools/japicc/modules/Internals/Descriptor.pm@ 16941

Last change on this file since 16941 was 13595, checked in by Don-vip, 7 years ago

tools update: Groovy 2.4.15, PMD 6.2.0, JAPICC 2.4

File size: 2.9 KB
RevLine 
[11682]1###########################################################################
2# A module to handle XML descriptors
3#
[13595]4# Copyright (C) 2016-2018 Andrey Ponomarenko's ABI Laboratory
[11682]5#
6# Written by Andrey Ponomarenko
7#
[13595]8# This library is free software; you can redistribute it and/or
9# modify it under the terms of the GNU Lesser General Public
10# License as published by the Free Software Foundation; either
11# version 2.1 of the License, or (at your option) any later version.
[11682]12#
[13595]13# This library is distributed in the hope that it will be useful,
[11682]14# but WITHOUT ANY WARRANTY; without even the implied warranty of
[13595]15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16# Lesser General Public License for more details.
[11682]17#
[13595]18# You should have received a copy of the GNU Lesser General Public
19# License along with this library; if not, write to the Free Software
20# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21# MA 02110-1301 USA.
[11682]22###########################################################################
23use strict;
24
25sub createDesc($$)
26{
27 my ($Path, $LVer) = @_;
28
29 if(not -e $Path) {
30 return undef;
31 }
32
[13595]33 if(-d $Path or $Path=~/\.(jar|jmod)\Z/)
[11682]34 {
35 return "
36 <version>
37 ".$In::Desc{$LVer}{"TargetVersion"}."
38 </version>
39
40 <archives>
41 $Path
42 </archives>";
43 }
44
45 # standard XML-descriptor
46 return readFile($Path);
47}
48
49sub readDesc($$)
50{
51 my ($Content, $LVer) = @_;
52
53 if(not $Content) {
54 exitStatus("Error", "XML descriptor is empty");
55 }
56
57 if($Content!~/\</) {
58 exitStatus("Error", "descriptor should be one of the following: Java archive, XML descriptor, API dump or directory with Java archives.");
59 }
60
61 $Content=~s/\/\*(.|\n)+?\*\///g;
62 $Content=~s/<\!--(.|\n)+?-->//g;
63 $In::Desc{$LVer}{"Version"} = parseTag(\$Content, "version");
64
65 if(defined $In::Desc{$LVer}{"TargetVersion"}) {
66 $In::Desc{$LVer}{"Version"} = $In::Desc{$LVer}{"TargetVersion"};
67 }
68
69 if($In::Desc{$LVer}{"Version"} eq "") {
70 exitStatus("Error", "version in the XML descriptor is not specified (<version> section)");
71 }
72
73 if(my $Archives = parseTag(\$Content, "archives"))
74 {
75 foreach my $Path (split(/\s*\n\s*/, $Archives))
76 {
77 if(not -e $Path) {
78 exitStatus("Access_Error", "can't access \'$Path\'");
79 }
80 $Path = getAbsPath($Path);
81 $In::Desc{$LVer}{"Archives"}{$Path} = 1;
82 }
83 }
84 else {
85 exitStatus("Error", "descriptor does not contain info about Java archives");
86 }
87
88 foreach my $Package (split(/\s*\n\s*/, parseTag(\$Content, "skip_packages"))) {
89 $In::Desc{$LVer}{"SkipPackages"}{$Package} = 1;
90 }
91 foreach my $Package (split(/\s*\n\s*/, parseTag(\$Content, "packages"))) {
92 $In::Desc{$LVer}{"KeepPackages"}{$Package} = 1;
93 }
94}
95
96return 1;
Note: See TracBrowser for help on using the repository browser.