| 1 |
#!/usr/bin/perl -w |
#!/usr/bin/perl -w |
| 2 |
use strict; |
use strict; |
| 3 |
use Message::Util::QName::Filter { |
use Message::Util::QName::Filter { |
|
c => q<http://suika.fam.cx/~wakaba/archive/2004/8/18/dom-core#>, |
|
|
DIS => q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS#>, |
|
| 4 |
dis => q<http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis-->, |
dis => q<http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis-->, |
| 5 |
dp => q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS#Perl/>, |
dp => q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS#Perl/>, |
|
fe => q<http://suika.fam.cx/www/2006/feature/>, |
|
| 6 |
ManakaiDOM => q<http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#>, |
ManakaiDOM => q<http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#>, |
|
pc => q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/PerlCode#>, |
|
| 7 |
swcfg21 => q<http://suika.fam.cx/~wakaba/archive/2005/swcfg21#>, |
swcfg21 => q<http://suika.fam.cx/~wakaba/archive/2005/swcfg21#>, |
|
Util => q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/>, |
|
| 8 |
}; |
}; |
| 9 |
|
|
| 10 |
|
our$VERSION=do{my @r=(q$Revision$=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; |
| 11 |
use Cwd; |
use Cwd; |
| 12 |
use Getopt::Long; |
use Getopt::Long; |
| 13 |
use Pod::Usage; |
use Pod::Usage; |
| 14 |
my %Opt = (create_module => []); |
our %Opt = (create_module => []); |
| 15 |
|
my @target_modules; |
| 16 |
GetOptions ( |
GetOptions ( |
| 17 |
|
'create-dtd-driver=s' => sub { |
| 18 |
|
shift; |
| 19 |
|
my $i = [split /\s+/, shift, 3]; |
| 20 |
|
$i->[3] = 'dtd-driver'; |
| 21 |
|
push @{$Opt{create_module}}, $i; |
| 22 |
|
}, |
| 23 |
|
'create-dtd-modules=s' => sub { |
| 24 |
|
shift; |
| 25 |
|
my $i = [split /\s+/, shift, 3]; |
| 26 |
|
$i->[3] = 'dtd-modules'; |
| 27 |
|
push @{$Opt{create_module}}, $i; |
| 28 |
|
}, |
| 29 |
'create-perl-module=s' => sub { |
'create-perl-module=s' => sub { |
| 30 |
shift; |
shift; |
| 31 |
my $i = [split /\s+/, shift, 3]; |
my $i = [split /\s+/, shift, 3]; |
| 32 |
$i->[3] = 'perl-pm'; |
$i->[3] = 'perl-pm'; |
| 33 |
push @{$Opt{create_module}}, $i; |
push @{$Opt{create_module}}, $i; |
| 34 |
|
push @target_modules, [$i->[0], $i->[2]]; |
| 35 |
}, |
}, |
| 36 |
'create-perl-test=s' => sub { |
'create-perl-test=s' => sub { |
| 37 |
shift; |
shift; |
| 38 |
my $i = [split /\s+/, shift, 3]; |
my $i = [split /\s+/, shift, 3]; |
| 39 |
$i->[3] = 'perl-t'; |
$i->[3] = 'perl-t'; |
| 40 |
push @{$Opt{create_module}}, $i; |
push @{$Opt{create_module}}, $i; |
| 41 |
|
push @target_modules, [$i->[0], $i->[2]]; |
| 42 |
}, |
}, |
| 43 |
'debug' => \$Opt{debug}, |
'debug' => \$Opt{debug}, |
| 44 |
'dis-file-suffix=s' => \$Opt{dis_suffix}, |
'dis-file-suffix=s' => \$Opt{dis_suffix}, |
| 45 |
'daem-file-suffix=s' => \$Opt{daem_suffix}, |
'daem-file-suffix=s' => \$Opt{daem_suffix}, |
| 46 |
'dafs-file-suffix=s' => \$Opt{dafs_suffix}, |
'dafs-file-suffix=s' => \$Opt{dafs_suffix}, |
| 47 |
'dafx-file-suffix=s' => \$Opt{dafx_suffix}, |
'dafx-file-suffix=s' => \$Opt{dafx_suffix}, |
| 48 |
|
'dtd-file-suffix=s' => \$Opt{dtd_suffix}, |
| 49 |
'help' => \$Opt{help}, |
'help' => \$Opt{help}, |
| 50 |
|
'load-module=s' => sub { |
| 51 |
|
shift; |
| 52 |
|
my $i = [split /\s+/, shift, 2]; |
| 53 |
|
push @target_modules, [$i->[0], $i->[1]]; |
| 54 |
|
}, |
| 55 |
|
'mod-file-suffix=s' => \$Opt{mod_suffix}, |
| 56 |
'search-path|I=s' => sub { |
'search-path|I=s' => sub { |
| 57 |
shift; |
shift; |
| 58 |
my @value = split /\s+/, shift; |
my @value = split /\s+/, shift; |
| 100 |
$Opt{daem_suffix} = '.dafm' unless defined $Opt{daem_suffix}; |
$Opt{daem_suffix} = '.dafm' unless defined $Opt{daem_suffix}; |
| 101 |
$Opt{dafx_suffix} = '.dafx' unless defined $Opt{dafx_suffix}; |
$Opt{dafx_suffix} = '.dafx' unless defined $Opt{dafx_suffix}; |
| 102 |
$Opt{dafs_suffix} = '.dafs' unless defined $Opt{dafs_suffix}; |
$Opt{dafs_suffix} = '.dafs' unless defined $Opt{dafs_suffix}; |
| 103 |
$Message::DOM::DOMFeature::DEBUG = 1 if $Opt{debug}; |
$Opt{dtd_suffix} = '.dtd' unless defined $Opt{dtd_suffix}; |
| 104 |
|
$Opt{mod_suffix} = '.mod' unless defined $Opt{mod_suffix}; |
| 105 |
require Error; |
require Error; |
| 106 |
$Error::Debug = 1 if $Opt{debug}; |
$Error::Debug = 1 if $Opt{debug}; |
| 107 |
$Message::Util::Error::VERBOSE = 1 if $Opt{verbose}; |
$Message::Util::Error::VERBOSE = 1 if $Opt{verbose}; |
| 133 |
my $start_time; |
my $start_time; |
| 134 |
BEGIN { $start_time = time } |
BEGIN { $start_time = time } |
| 135 |
|
|
| 136 |
use Message::Util::DIS::DNLite; |
use Message::DOM::DOMCore; |
|
|
|
|
my %feature; |
|
| 137 |
|
|
| 138 |
for (@{$Opt{create_module}}) { |
for (@{$Opt{create_module}}) { |
| 139 |
my (undef, undef, undef, $out_type) = @$_; |
my (undef, undef, undef, $out_type) = @$_; |
| 140 |
|
|
| 141 |
if ($out_type eq 'perl-pm') { |
if ($out_type eq 'perl-pm') { |
| 142 |
require 'manakai/daf-perl-pm.pl'; |
require 'manakai/daf-perl-pm.pl'; |
|
$feature{'+' . ExpandedURI q<Util:PerlCode>} = '1.0'; |
|
| 143 |
} elsif ($out_type eq 'perl-t') { |
} elsif ($out_type eq 'perl-t') { |
| 144 |
require 'manakai/daf-perl-t.pl'; |
require 'manakai/daf-perl-t.pl'; |
| 145 |
$feature{ExpandedURI q<fe:GenericLS>} = '3.0'; |
} elsif ($out_type eq 'dtd-modules') { |
| 146 |
$feature{'+' . ExpandedURI q<DIS:TDT>} = '1.0'; |
require 'manakai/daf-dtd-modules.pl'; |
| 147 |
$feature{'+' . ExpandedURI q<Util:PerlCode>} = '1.0'; |
} elsif ($out_type eq 'dtd-driver') { |
| 148 |
|
require 'manakai/daf-dtd-modules.pl'; |
| 149 |
} |
} |
| 150 |
} |
} |
| 151 |
|
|
| 152 |
our $limpl = $Message::DOM::ImplementationRegistry->get_implementation |
our $impl = $Message::DOM::ImplementationRegistry->get_implementation; |
|
({ExpandedURI q<fe:Min> => '3.0', |
|
|
'+' . ExpandedURI q<DIS:DNLite> => '1.0', |
|
|
'+' . ExpandedURI q<DIS:Core> => '1.0', |
|
|
%feature, |
|
|
}); |
|
|
our $impl = $limpl->get_feature (ExpandedURI q<DIS:Core> => '1.0'); |
|
| 153 |
|
|
| 154 |
## --- Loading and Updating the Database |
## --- Loading and Updating the Database |
| 155 |
|
|
| 159 |
$db->dom_config->set_parameter ('error-handler' => \&daf_on_error); |
$db->dom_config->set_parameter ('error-handler' => \&daf_on_error); |
| 160 |
|
|
| 161 |
my $parser = $impl->create_dis_parser; |
my $parser = $impl->create_dis_parser; |
|
my $DNi = $impl->get_feature (ExpandedURI q<DIS:DNLite> => '1.0'); |
|
| 162 |
my %ModuleSourceDISDocument; |
my %ModuleSourceDISDocument; |
| 163 |
my %ModuleSourceDNLDocument; |
my %ModuleSourceDNLDocument; |
| 164 |
my %ModuleNameNamespaceBinding = ( |
my %ModuleNameNamespaceBinding = ( |
| 168 |
## property. |
## property. |
| 169 |
); |
); |
| 170 |
|
|
|
my @target_modules; |
|
|
for (@{$Opt{create_module}}) { |
|
|
my ($mod_uri, $out_path, $mod_for, $out_type) = @$_; |
|
|
push @target_modules, [$mod_uri, $mod_for]; |
|
|
} |
|
|
|
|
| 171 |
my $ResourceCount = 0; |
my $ResourceCount = 0; |
| 172 |
$db->pl_update_module (\@target_modules, |
$db->pl_update_module (\@target_modules, |
| 173 |
get_module_index_file_name => sub { |
get_module_index_file_name => sub { |
| 251 |
status_msg_ " " if ($ResourceCount % (10 * 10)) == 0; |
status_msg_ " " if ($ResourceCount % (10 * 10)) == 0; |
| 252 |
status_msg '' if ($ResourceCount % (10 * 50)) == 0; |
status_msg '' if ($ResourceCount % (10 * 50)) == 0; |
| 253 |
} |
} |
| 254 |
}); |
}, implementation => $impl); |
| 255 |
status_msg ''; |
status_msg ''; |
| 256 |
status_msg "done"; |
status_msg "done"; |
| 257 |
|
|
| 285 |
|
|
| 286 |
daf_check_undefined (); |
daf_check_undefined (); |
| 287 |
|
|
|
undef $DNi; |
|
| 288 |
undef %ModuleSourceDNLDocument; |
undef %ModuleSourceDNLDocument; |
| 289 |
exit $HasError if $HasError; |
exit $HasError if $HasError; |
| 290 |
|
|
| 297 |
daf_perl_pm ($mod_uri, $out_file_path, $mod_for); |
daf_perl_pm ($mod_uri, $out_file_path, $mod_for); |
| 298 |
} elsif ($out_type eq 'perl-t') { |
} elsif ($out_type eq 'perl-t') { |
| 299 |
daf_perl_t ($mod_uri, $out_file_path, $mod_for); |
daf_perl_t ($mod_uri, $out_file_path, $mod_for); |
| 300 |
|
} elsif ($out_type eq 'dtd-modules') { |
| 301 |
|
daf_dtd_modules ($mod_uri, $out_file_path, $mod_for); |
| 302 |
|
} elsif ($out_type eq 'dtd-driver') { |
| 303 |
|
daf_dtd_driver ($mod_uri, $out_file_path, $mod_for); |
| 304 |
} |
} |
| 305 |
} |
} |
| 306 |
|
|
| 313 |
undef $db; |
undef $db; |
| 314 |
status_msg "done"; |
status_msg "done"; |
| 315 |
|
|
|
undef $limpl; |
|
| 316 |
undef $impl; |
undef $impl; |
| 317 |
|
|
| 318 |
{ |
{ |
| 405 |
my $dis_doc = $ModuleSourceDISDocument{$module_uri}; |
my $dis_doc = $ModuleSourceDISDocument{$module_uri}; |
| 406 |
next M unless $dis_doc; |
next M unless $dis_doc; |
| 407 |
verbose_msg_ qq<Converting <$module_uri>...>; |
verbose_msg_ qq<Converting <$module_uri>...>; |
| 408 |
my $dnl_doc = $DNi->convert_dis_document_to_dnl_document |
my $dnl_doc = $impl->convert_dis_document_to_dnl_document |
| 409 |
($dis_doc, database_arg => $db, |
($dis_doc, database_arg => $db, |
| 410 |
base_namespace_binding => |
base_namespace_binding => |
| 411 |
{(map {$_->local_name => $_->target_namespace_uri} |
{(map {$_->local_name => $_->target_namespace_uri} |