/[suikacvs]/messaging/manakai/bin/daf.pl
Suika

Contents of /messaging/manakai/bin/daf.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Sat Feb 25 16:49:55 2006 UTC (19 years, 6 months ago) by wakaba
Branch: MAIN
File MIME type: text/plain
++ manakai/bin/ChangeLog	25 Feb 2006 16:31:38 -0000
2006-02-26  Wakaba  <wakaba@suika.fam.cx>

	* dac2pm.pl (--dafx-file-suffix): New dummy option.

	* daf.pl: New script.

++ manakai/lib/Message/Util/ChangeLog	25 Feb 2006 16:40:55 -0000
2006-02-26  Wakaba  <wakaba@suika.fam.cx>

	* PerlCode.dis (Require): Missing reference to the |DISlib:DISMarkup|
	module is added.

2006-02-25  Wakaba  <wakaba@suika.fam.cx>

	* DIS.dis (lookupNamespacePrefix): Resolves prefix by
	namespace resolver if available.
	(disNamespaceResolver): New attribute.
	(loadModule): Sets |revision| attribute of the created module.
	(ownerModuleRef): Setter is added.
	(addTypeURI): Set |ownerModule| attribute if possible.
	(ManakaiDISModuleLite): The class no longer inherits |DISAnyResource|
	class and |ManakaiDefaultExceptionHandler| class.
	(mergeAsAlias): New |noEqualityCheck| parameter is added.

	* Makefile: New variables for |DAF| are added.

++ manakai/lib/Message/Util/DIS/ChangeLog	25 Feb 2006 16:45:17 -0000
2006-02-26  Wakaba  <wakaba@suika.fam.cx>

	* Perl.dis (plLoadDISDatabaseModule): Do nothing if the
	module is already loaded.
	(plUpdateModule): Parameter |moduleURI| is changed
	to |modules| so that multiple modules can be updated once.
	Don't try to read index file if it is not exist.

2006-02-25  Wakaba  <wakaba@suika.fam.cx>

	* DNLite.dis (convertDISDocumentToDNLDocument): New
	|baseNamespaceBinding| parameter is added.

	* Perl.dis (plLoadDISDatabase): Removes |c:error-handler|
	property (it is |null| if specified).
	(plStore): New |noMainDatabase| parameter is added.  Don't
	write resources that are not |isDefined|.  Copies |DIS:revision|
	property of modules to database index file.
	(plLoadDISDatabaseModule): Notify before and after
	a file is read.  Don't throw |DIS:RESOURCE_ALREADY_DEFINED_ERR|
	if the resource already in the database is not |isDefined|.
	(plLoadDISDatabaseIndex): Notify before and after
        a file is read.
	(plDatabaseModuleResolver): New attribute accessor.

++ manakai/lib/Message/DOM/ChangeLog	25 Feb 2006 16:33:00 -0000
2006-02-25  Wakaba  <wakaba@suika.fam.cx>

	* DOMFeature.dis (Require): Missing reference to |DISlib:Test|
	module is added.

1 wakaba 1.1 #!/usr/bin/perl -w
2     use strict;
3     use Message::Util::QName::Filter {
4     DIS => q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS#>,
5     dis => q<http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis-->,
6     dp => q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/DIS#Perl/>,
7     fe => q<http://suika.fam.cx/www/2006/feature/>,
8     ManakaiDOM => q<http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#>,
9     swcfg21 => q<http://suika.fam.cx/~wakaba/archive/2005/swcfg21#>,
10     Util => q<http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/>,
11     };
12    
13     use Cwd;
14     use Getopt::Long;
15     use Pod::Usage;
16     my %Opt = (create_module => []);
17     GetOptions (
18     'create-perl-module=s' => sub {
19     shift;
20     my $i = [split /\s+/, shift, 3];
21     $i->[3] = 'pm';
22     push @{$Opt{create_module}}, $i;
23     },
24     'debug' => \$Opt{debug},
25     'dis-file-suffix=s' => \$Opt{dis_suffix},
26     'daem-file-suffix=s' => \$Opt{daem_suffix},
27     'dafx-file-suffix=s' => \$Opt{dafx_suffix},
28     'help' => \$Opt{help},
29     'search-path|I=s' => sub {
30     shift;
31     my @value = split /\s+/, shift;
32     while (my ($ns, $path) = splice @value, 0, 2, ()) {
33     unless (defined $path) {
34     die qq[$0: Search-path parameter without path: "$ns"];
35     }
36     push @{$Opt{input_search_path}->{$ns} ||= []}, $path;
37     }
38     },
39     'search-path-catalog-file-name=s' => sub {
40     shift;
41     require File::Spec;
42     my $path = my $path_base = shift;
43     $path_base =~ s#[^/]+$##;
44     $Opt{search_path_base} = $path_base;
45     open my $file, '<', $path or die "$0: $path: $!";
46     while (<$file>) {
47     if (s/^\s*\@//) { ## Processing instruction
48     my ($target, $data) = split /\s+/;
49     if ($target eq 'base') {
50     $Opt{search_path_base} = File::Spec->rel2abs ($data, $path_base);
51     } else {
52     die "$0: $target: Unknown target";
53     }
54     } elsif (/^\s*\#/) { ## Comment
55     #
56     } elsif (/\S/) { ## Catalog entry
57     s/^\s+//;
58     my ($ns, $path) = split /\s+/;
59     push @{$Opt{input_search_path}->{$ns} ||= []},
60     File::Spec->rel2abs ($path, $Opt{search_path_base});
61     }
62     }
63     ## NOTE: File paths with SPACEs are not supported
64     ## NOTE: Future version might use file: URI instead of file path.
65     },
66     'undef-check!' => \$Opt{no_undef_check},
67     'verbose!' => \$Opt{verbose},
68     ) or pod2usage (2);
69     pod2usage ({-exitval => 0, -verbose => 1}) if $Opt{help};
70     $Opt{no_undef_check} = defined $Opt{no_undef_check}
71     ? $Opt{no_undef_check} ? 0 : 1 : 0;
72     $Opt{dis_suffix} = '.dis' unless defined $Opt{dis_suffix};
73     $Opt{daem_suffix} = '.dafm' unless defined $Opt{daem_suffix};
74     $Opt{dafx_suffix} = '.dafx' unless defined $Opt{dafx_suffix};
75     $Message::DOM::DOMFeature::DEBUG = 1 if $Opt{debug};
76     require Error;
77     $Error::Debug = 1 if $Opt{debug};
78     $Message::Util::Error::VERBOSE = 1 if $Opt{verbose};
79    
80     sub status_msg ($) {
81     my $s = shift;
82     $s .= "\n" unless $s =~ /\n$/;
83     print STDERR $s;
84     }
85    
86     sub status_msg_ ($) {
87     my $s = shift;
88     print STDERR $s;
89     }
90    
91     sub verbose_msg ($) {
92     my $s = shift;
93     $s .= "\n" unless $s =~ /\n$/;
94     print STDERR $s if $Opt{verbose};
95     }
96    
97     sub verbose_msg_ ($) {
98     my $s = shift;
99     print STDERR $s if $Opt{verbose};
100     }
101    
102     my $start_time;
103     BEGIN { $start_time = time }
104    
105     use Message::Util::DIS::DNLite;
106     use Message::Util::PerlCode;
107    
108     my $limpl = $Message::DOM::ImplementationRegistry->get_implementation
109     ({ExpandedURI q<fe:Min> => '3.0',
110     '+' . ExpandedURI q<DIS:DNLite> => '1.0',
111     '+' . ExpandedURI q<DIS:Core> => '1.0',
112     '+' . ExpandedURI q<Util:PerlCode> => '1.0',
113     });
114     my $impl = $limpl->get_feature (ExpandedURI q<DIS:Core> => '1.0');
115     my $parser = $impl->create_dis_parser;
116     our $DNi = $impl->get_feature (ExpandedURI q<DIS:DNLite> => '1.0');
117    
118     my $HasError;
119     my $db = $impl->create_dis_database;
120     $db->pl_database_module_resolver (\&daf_db_module_resolver);
121     $db->dom_config->set_parameter ('error-handler' => \&daf_on_error);
122    
123     my %ModuleSourceDISDocument;
124     my %ModuleSourceDNLDocument;
125     my %ModuleNameNamespaceBinding = (
126     DISCore => q<http://suika.fam.cx/~wakaba/archive/2004/dis/Core#>,
127     ## This builtin binding is required since
128     ## some module has |DISCore:author| property before |dis:Require|
129     ## property.
130     );
131    
132     my @target_modules;
133     for (@{$Opt{create_module}}) {
134     my ($mod_uri, $out_path, $mod_for, $out_type) = @$_;
135     push @target_modules, [$mod_uri, $mod_for];
136     }
137    
138     my $ResourceCount = 0;
139     $db->pl_update_module (\@target_modules,
140     get_module_index_file_name => sub {
141     shift; # $db
142     daf_get_module_index_file_name (@_);
143     },
144     get_module_source_document_from_uri => sub {
145     my ($db, $module_uri, $module_for) = @_;
146     status_msg '';
147     status_msg qq<Loading module <$module_uri> for <$module_for>...>;
148     $ResourceCount = 0;
149    
150     unless (defined $ModuleSourceDNLDocument{$module_uri}) {
151     unless (defined $ModuleSourceDISDocument{$module_uri}) {
152     daf_open_source_dis_document ($module_uri);
153     }
154     daf_convert_dis_document_to_dnl_document ();
155     }
156     return $ModuleSourceDNLDocument{$module_uri};
157     },
158     get_module_source_document_from_resource => sub ($$$$$$) {
159     my ($self, $db, $uri, $ns, $ln, $for) = @_;
160     status_msg '';
161     status_msg qq<Loading module "$ln" for <$for>...>;
162     $ResourceCount = 0;
163    
164     my $module_uri = $ns.$ln;
165     unless (defined $ModuleSourceDNLDocument{$module_uri}) {
166     unless (defined $ModuleSourceDISDocument{$module_uri}) {
167     daf_open_source_dis_document ($module_uri);
168     }
169     daf_convert_dis_document_to_dnl_document ();
170     }
171     return $ModuleSourceDNLDocument{$module_uri};
172     },
173     get_module_source_revision => sub {
174     my ($db, $module_uri) = @_;
175     my $ns = $module_uri;
176     $ns =~ s/(\w+)\z//;
177     my $ln = $1;
178    
179     my $name = dac_search_file_path_stem ($ns, $ln, $Opt{dis_suffix});
180     if (defined $name) {
181     return [stat $name.$Opt{dis_suffix}]->[9];
182     } else {
183     return 0;
184     }
185     },
186     get_referring_module_uri_list => sub {
187     my ($db, $module_uri) = @_;
188     unless (defined $ModuleSourceDNLDocument{$module_uri}) {
189     unless (defined $ModuleSourceDISDocument{$module_uri}) {
190     daf_open_source_dis_document ($module_uri);
191     }
192     daf_convert_dis_document_to_dnl_document ();
193     }
194     return daf_get_referring_module_uri_list ($module_uri);
195     },
196     on_resource_read => sub ($$) {
197     if ((++$ResourceCount % 10) == 0) {
198     status_msg_ "*";
199     status_msg_ " " if ($ResourceCount % (10 * 10)) == 0;
200     status_msg '' if ($ResourceCount % (10 * 50)) == 0;
201     }
202     });
203    
204    
205     ## Removes reference from document to database
206     our @Document;
207     for my $dis (@Document) {
208     $dis->unlink_from_document;
209     $dis->dis_database (undef);
210     }
211    
212     status_msg '';
213    
214     status_msg qq<Reading properties...>;
215     $ResourceCount = 0;
216     $db->read_properties (on_resource_read => sub ($$) {
217     if ((++$ResourceCount % 10) == 0) {
218     status_msg_ "*";
219     status_msg_ " " if ($ResourceCount % (10 * 10)) == 0;
220     status_msg '' if ($ResourceCount % (10 * 50)) == 0;
221     }
222     });
223     status_msg '';
224     status_msg "done";
225    
226     status_msg_ qq<Writing database files...>;
227     $db->pl_store ('dummy', sub ($$) {
228     my ($db, $mod, $type) = @_;
229     my $ns = $mod->namespace_uri;
230     my $ln = $mod->local_name;
231     my $suffix = $type eq ExpandedURI q<dp:ModuleIndexFile>
232     ? $Opt{dafx_suffix} : $Opt{daem_suffix};
233     my $name = dac_search_file_path_stem ($ns, $ln, $suffix);
234     if (defined $name) {
235     $name .= $suffix;
236     } elsif (defined ($name = dac_search_file_path_stem
237     ($ns, $ln, $Opt{dis_suffix}))) {
238     $name .= $suffix;
239     } else {
240     $name = Cwd::abs_path
241     (File::Spec->canonpath
242     (File::Spec->catfile
243     (defined $Opt{input_search_path}->{$ns}->[0]
244     ? $Opt{input_search_path}->{$ns}->[0] : '.',
245     $ln.$suffix)));
246     }
247     verbose_msg qq<Database >.
248     ($type eq <Q::dp|ModuleIndexFile> ? 'index' : 'module').
249     qq< <$ns$ln> is written to "$name">;
250     return $name;
251     }, no_main_database => 1);
252     status_msg "done";
253    
254     daf_check_undefined ();
255    
256     for (@{$Opt{create_module}}) {
257     my ($mod_uri, $out_file_path, $mod_for, $out_type) = @$_;
258     unless (defined $mod_for) {
259     $mod_for = $db->get_module ($mod_uri)
260     ->get_property_text (ExpandedURI q<dis:DefaultFor>,
261     ExpandedURI q<ManakaiDOM:all>);
262     }
263     my $mod = $db->get_module ($mod_uri, for_arg => $mod_for);
264    
265     if ($out_type eq 'pm') {
266     status_msg_ qq<Generating Perl module from <$mod_uri> for <$mod_for>...>;
267     my $pl = $mod->pl_generate_perl_module_file;
268     status_msg qq<done>;
269    
270     my $output;
271     defined $out_file_path
272     ? (open $output, '>', $out_file_path or die "$0: $out_file_path: $!")
273     : ($output = \*STDOUT);
274    
275     status_msg_ sprintf qq<Writing Perl module %s...>,
276     defined $out_file_path
277     ? q<">.$out_file_path.q<">
278     : 'to stdout';
279     print $output $pl->stringify;
280     close $output;
281     status_msg q<done>;
282     }
283     }
284    
285     daf_check_undefined ();
286    
287     status_msg_ "Closing the database...";
288     $db->free;
289     undef $db;
290     undef %ModuleSourceDNLDocument;
291     status_msg "done";
292    
293     undef $DNi;
294    
295     {
296     use integer;
297     my $time = time - $start_time;
298     status_msg sprintf qq<%d'%02d''>, $time / 60, $time % 60;
299     }
300     exit $HasError;
301    
302     END {
303     $db->free if $db;
304     }
305    
306     sub daf_open_source_dis_document ($) {
307     my ($module_uri) = @_;
308    
309     ## -- Finds |dis| source file
310     my $ns = $module_uri;
311     $ns =~ s/(\w+)\z//;
312     my $ln = $1;
313     my $file_name = dac_search_file_path_stem ($ns, $ln, $Opt{dis_suffix});
314     unless (defined $file_name) {
315     die "$0: Source file for <$ns$ln> is not found";
316     }
317     $file_name .= $Opt{dis_suffix};
318    
319     status_msg_ qq<Opening dis source file "$file_name"...>;
320    
321     ## -- Opens |dis| file and construct |DISDocument| tree
322     open my $file, '<', $file_name or die "$0: $file_name: $!";
323     my $dis = $parser->parse ({character_stream => $file});
324     require File::Spec;
325     $dis->flag (ExpandedURI q<swcfg21:fileName> =>
326     File::Spec->abs2rel ($file_name));
327     $dis->dis_namespace_resolver (\&daf_module_name_namespace_resolver);
328     close $file;
329    
330     ## -- Registers namespace URI
331     my $mod = $dis->module_element;
332     if ($mod) {
333     my $qn = $mod->get_attribute_ns (ExpandedURI q<dis:>, 'QName');
334     if ($qn) {
335     my $prefix = $qn->value;
336     $prefix =~ s/^[^:|]*[:|]\s*//;
337     $prefix =~ s/\s+$//;
338     unless (defined $ModuleNameNamespaceBinding{$prefix}) {
339     $ModuleNameNamespaceBinding{$prefix} = $mod->defining_namespace_uri;
340     }
341     }
342     }
343    
344     $ModuleSourceDISDocument{$module_uri} = $dis;
345     status_msg q<done>;
346    
347     R: for (@{daf_get_referring_module_uri_list ($module_uri)}) {
348     next R if defined $db->{modDef}->{$_};
349     next R if defined $ModuleSourceDNLDocument{$_};
350     next R if defined $ModuleSourceDISDocument{$_};
351     my $idx_file_name = daf_get_module_index_file_name ($_);
352     if (-f $idx_file_name) {
353     daf_open_current_module_index ($_, $idx_file_name);
354     } else {
355     daf_open_source_dis_document ($_);
356     }
357     }
358     } # daf_open_source_dis_document
359    
360     sub daf_open_current_module_index ($$) {
361     my ($module_uri, $file_name) = @_;
362     $db->pl_load_dis_database_index ($file_name);
363    
364     R: for (@{$db->get_module ($module_uri)
365     ->get_referring_module_uri_list}) {
366     next R if defined $db->{modDef}->{$_};
367     next R if defined $ModuleSourceDNLDocument{$_};
368     next R if defined $ModuleSourceDISDocument{$_};
369     my $idx_file_name = daf_get_module_index_file_name ($_);
370     if (-f $idx_file_name) {
371     daf_open_current_module_index ($_, $idx_file_name);
372     } else {
373     daf_open_source_dis_document ($_);
374     }
375     }
376     } # daf_open_current_module_index
377    
378     sub daf_convert_dis_document_to_dnl_document () {
379     M: for my $module_uri (keys %ModuleSourceDISDocument) {
380     my $dis_doc = $ModuleSourceDISDocument{$module_uri};
381     next M unless $dis_doc;
382     verbose_msg_ qq<Converting <$module_uri>...>;
383     my $dnl_doc = $DNi->convert_dis_document_to_dnl_document
384     ($dis_doc, database_arg => $db,
385     base_namespace_binding =>
386     {(map {$_->local_name => $_->target_namespace_uri}
387     grep {$_} values %{$db->{modDef}}),
388     %ModuleNameNamespaceBinding});
389     push @Document, $dnl_doc;
390     $ModuleSourceDNLDocument{$module_uri} = $dnl_doc;
391     $dis_doc->free;
392     delete $ModuleSourceDISDocument{$module_uri};
393     verbose_msg q<done>;
394     }
395     } # daf_convert_dis_document_to_dnl_document
396    
397     sub daf_get_referring_module_uri_list ($) {
398     my $module_uri = shift;
399     my $ns = $module_uri;
400     $ns =~ s/\w+\z//;
401     my $src = $ModuleSourceDNLDocument{$module_uri};
402     $src = $ModuleSourceDISDocument{$module_uri} unless defined $src;
403     my $mod_el = $src->module_element;
404     my $r = [];
405     if ($mod_el) {
406     my $req_el = $mod_el->require_element;
407     if ($req_el) {
408     M: for my $m_el (@{$req_el->child_nodes}) {
409     next M unless $m_el->node_type eq '#element';
410     next M unless $m_el->expanded_uri eq ExpandedURI q<dis:Module>;
411     my $qn_el = $m_el->get_attribute_ns (ExpandedURI q<dis:>, 'QName');
412     if ($qn_el) {
413     push @$r, $qn_el->qname_value_uri;
414     } else {
415     my $n_el = $m_el->get_attribute_ns (ExpandedURI q<dis:>, 'Name');
416     if ($n_el) {
417     push @$r, $ns.$n_el->value;
418     } else {
419     # The module itself
420     }
421     }
422     }
423     }
424     }
425     return $r;
426     } # daf_get_referring_module_uri_list
427    
428     sub dac_search_file_path_stem ($$$) {
429     my ($ns, $ln, $suffix) = @_;
430     require File::Spec;
431     for my $dir ('.', @{$Opt{input_search_path}->{$ns}||[]}) {
432     my $name = Cwd::abs_path
433     (File::Spec->canonpath
434     (File::Spec->catfile ($dir, $ln)));
435     if (-f $name.$suffix) {
436     return $name;
437     }
438     }
439     return undef;
440     } # dac_search_file_path_stem;
441    
442     sub daf_get_module_index_file_name ($$) {
443     my ($module_uri) = @_;
444     my $ns = $module_uri;
445     $ns =~ s/(\w+)\z//;
446     my $ln = $1;
447    
448     verbose_msg qq<Database module index <$module_uri> is requested>;
449     my $suffix = $Opt{dafx_suffix};
450     my $name = dac_search_file_path_stem ($ns, $ln, $suffix);
451     if (defined $name) {
452     $name .= $suffix;
453     } elsif (defined ($name = dac_search_file_path_stem
454     ($ns, $ln, $Opt{dis_suffix}))) {
455     $name .= $suffix;
456     } else {
457     $name = Cwd::abs_path
458     (File::Spec->canonpath
459     (File::Spec->catfile
460     (defined $Opt{input_search_path}->{$ns}->[0]
461     ? $Opt{input_search_path}->{$ns}->[0] : '.',
462     $ln.$suffix)));
463     }
464     return $name;
465     } # daf_get_module_index_file_name
466    
467     sub daf_module_name_namespace_resolver ($) {
468     my $prefix = shift;
469    
470     ## -- From modules in database
471     M: for (values %{$db->{modDef}}) {
472     my $mod = $_;
473     next M unless defined $mod;
474     if ($mod->local_name eq $prefix) {
475     return $mod->target_namespace_uri;
476     }
477     }
478    
479     ## -- From not-in-database-yet module list
480     if (defined $ModuleNameNamespaceBinding{$prefix}) {
481     return $ModuleNameNamespaceBinding{$prefix};
482     }
483     return undef;
484     } # daf_module_name_namespace_resolver
485    
486     sub daf_db_module_resolver ($$$) {
487     my ($db, $mod, $type) = @_;
488     my $ns = $mod->namespace_uri;
489     my $ln = $mod->local_name;
490     my $suffix = $type eq ExpandedURI q<dp:ModuleIndexFile>
491     ? $Opt{dafx_suffix} : $Opt{daem_suffix};
492     verbose_msg qq<Database module <$ns$ln> is requested>;
493     my $name = dac_search_file_path_stem ($ns, $ln, $suffix);
494     if (defined $name) {
495     return $name.$suffix;
496     } else {
497     return undef;
498     }
499     } # daf_db_module_resolver
500    
501     sub daf_on_error ($$) {
502     my ($self, $err) = @_;
503     if ($err->severity == $err->SEVERITY_WARNING) {
504     my $info = ExpandedURI q<dp:info>;
505     if ($err->type =~ /\Q$info\E/) {
506     my $msg = $err->text;
507     if ($msg =~ /\.\.\.\z/) {
508     verbose_msg_ $msg;
509     } else {
510     verbose_msg $msg;
511     }
512     } else {
513     my $msg = $err->text;
514     if ($msg =~ /\.\.\.\z/) {
515     status_msg_ $msg;
516     } else {
517     status_msg $msg;
518     }
519     }
520     } else {
521     warn $err;
522     $HasError = 1;
523     }
524     } # daf_on_error
525    
526     sub daf_check_undefined () {
527     unless ($Opt{no_undef_check}) {
528     status_msg_ "Checking undefined resources...";
529     $db->check_undefined_resource;
530     print STDERR "done\n";
531     }
532     } # daf_check_undefined
533    
534     __END__
535    
536     =head1 NAME
537    
538     dac.pl - Creating "dac" Database File from "dis" Source Files
539    
540     =head1 SYNOPSIS
541    
542     perl path/to/dac.pl [--input-db-file-name=input.dac] \
543     --output-file-name=out.dac [options...] \
544     input.dis
545     perl path/to/dac.pl --help
546    
547     =head1 DESCRIPTION
548    
549     This script, C<dac.pl>, compiles "dis" source files into "dac"
550     database file. The generated database file can be used
551     in turn to generate Perl module file, for example, by another
552     script C<dac2pm.pl> or can be used to create larger database
553     by specifying its file name as the C<--input-db-file-name>
554     argument of another C<dac.pl> execution.
555    
556     This script is part of manakai.
557    
558     =head1 OPTIONS
559    
560     =over 4
561    
562     =item I<input.dis> (Required)
563    
564     The unnamed option specifies a file name path of the source "dis" file
565     from which a database is created. This option is required.
566    
567     =item C<--input-db-file-name=I<file-name>> (Default: none)
568    
569     A file path of the base database. This option is optional; if this
570     option is specified, the database file is loaded first
571     and then I<input.dis> file is loaded in the context of it.
572     Otherwise, a new database is created.
573    
574     =item C<--output-file-name=I<file-name>> (Required)
575    
576     The
577    
578     =back
579    
580     =head1 SEE ALSO
581    
582     L<bin/dac2pm.pl> - Generating Perl module from "dac" file.
583    
584     L<lib/Message/Util/DIS.dis> - The actual implementation
585     of the "dis" interpretation.
586    
587     =head1 LICENSE
588    
589     Copyright 2004-2005 Wakaba <w@suika.fam.cx>. All rights reserved.
590    
591     This program is free software; you can redistribute it and/or
592     modify it under the same terms as Perl itself.
593    
594     =cut

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24