📄 docgen.pm
字号:
{
$self->user_prog()->code("@{[ $p->name() ]}: B<@{[ $p->value() ]}>");
$self->user_prog()->code();
}
$self->user_prog()->back();
}
next unless ($s->items()->size());
$self->user_prog()->code("F<Items>");
$self->user_prog()->code() if ($self->doc_ref()->target_fmt() ne 'pdf');
$self->user_prog()->over();
foreach my $i ($s->items()->to_array())
{
foreach my $p (grep(defined($_->value()), $i->attributes()->to_array()))
{
$self->user_prog()->code("@{[ $p->name() ]}: B<@{[ do{my $t=$p->value(); $t=~s/E</E </g; $t=~s/>/E<gt>/g; $t} ]}>");
$self->user_prog()->code();
}
$self->user_prog()->code();
}
$self->user_prog()->back();
}
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::DocGen::Chapter::UserScript;
use base qw(ETL::Pequel3::Type::Document::Chapter::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'chapter_name', default => 'user_script');
use Class::STL::ClassMembers::Constructor;
sub prepare
{
my $self = shift;
$self->user_prog()->code("F<@{[ $self->POM()->pequel_name() ]}>");
$self->user_prog()->code();
foreach my $s (map($_->to_array(), $self->POM()->user_sections()->to_array()))
{
$self->user_prog()->begin() unless ($self->doc_ref()->target_fmt() eq 'latex');
$self->user_prog()->code(" =@{[ $s->section_name() ]}");
if (grep(defined($_->value()), $s->attributes()->to_array()))
{
$self->user_prog()->code(" (");
foreach my $p (grep(defined($_->value()), $s->attributes()->to_array()))
{
$self->user_prog()->code(" @{[ $p->name() ]} = @{[ $p->value() ]}");
}
$self->user_prog()->code(" )");
}
foreach my $i ($s->items()->to_array())
{
$self->user_prog()->code(' ' .
join(' ', map($_->value(), grep(defined($_->value()), $i->attributes()->to_array())))
);
}
$self->user_prog()->end() unless ($self->doc_ref()->target_fmt() eq 'latex');
}
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::DocGen::Chapter::UserXml;
use base qw(ETL::Pequel3::Type::Document::Chapter::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'chapter_name', default => 'user_xml');
use Class::STL::ClassMembers::Constructor;
sub prepare
{
my $self = shift;
$self->user_prog()->code("F<@{[ $self->POM()->pequel_name() ]}>");
$self->user_prog()->begin();
$self->user_prog()->code(' ' . $self->POM()->xml()->xml2string());
$self->user_prog()->end();
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::DocGen::Chapter::Input;
use base qw(ETL::Pequel3::Type::Document::Chapter::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'chapter_name', default => 'input');
use Class::STL::ClassMembers::Constructor;
sub prepare
{
my $self = shift;
foreach
(
$self->POM()->input()->input_fields()->to_array(),
map($_->input_fields()->to_array(), $self->POM()->user_joins()->to_array())
)
{
$self->POM()->pequel_name() eq $_->xref()->pequel_ref()->pequel_name()
? $self->user_prog()->item("@{[ $_->xref()->target_name() ]}")
: $self->user_prog()->item("@{[ $_->xref()->pequel_ref()->pequel_name()
]}::@{[ $_->xref()->target_name() ]}");
$self->user_prog()->code();
$self->user_prog()->over();
if (defined($_->description())) {
$self->user_prog()->code("@{[ $_->description() ]}");
$self->user_prog()->code();
}
$self->user_prog()->code("F<@{[ $_->xref()->xref_key() ]}>");
$self->user_prog()->code();
$self->user_prog()->code("F<@{[ $_->pequel_type()->name() ]}>");
$self->user_prog()->code();
if ($_->name() =~ /^_/)
{
$self->user_prog()->code("F<Transparent>");
$self->user_prog()->code();
}
if (defined($_->calc_exp()))
{
$self->user_prog()->code("B<Derived>");
$self->user_prog()->code();# if ($self->doc_ref()->target_fmt() ne 'pdf');
$self->user_prog()->over();
$self->user_prog()->code("B<=> " . do{my $t=$_->calc_exp(); $t=~s/E</E </g; $t=~s/>/E<gt>/g; $t});
$self->user_prog()->code();
$self->user_prog()->back();
}
if ($_->xref()->_ref_list()->size())
{
$self->user_prog()->code("B<References>");
$self->user_prog()->code();# if ($self->doc_ref()->target_fmt() ne 'pdf');
$self->user_prog()->over();
foreach my $r (grep($_->obj_ref()->can('xref'), $_->xref()->_ref_list()->to_array()))
{
$self->user_prog()->code("@{[
('E<' . ($r->direction() eq '<' ? 'lt' : 'gt') . '>') x 1
]} @{[
$r->obj_ref()->xref()->xref_key()
]}");
$self->user_prog()->code();
}
$self->user_prog()->back();
}
$self->user_prog()->back();
}
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::DocGen::Chapter::Output;
use base qw(ETL::Pequel3::Type::Document::Chapter::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'chapter_name', default => 'output');
use Class::STL::ClassMembers::Constructor;
sub prepare
{
my $self = shift;
foreach
(
$self->POM()->output()->transfer_fields()->to_array(),
$self->POM()->output()->output_fields()->to_array()
)
{
$self->POM()->pequel_name() eq $_->xref()->pequel_ref()->pequel_name()
? $self->user_prog()->item("@{[ $_->xref()->target_name() ]}")
: $self->user_prog()->item("@{[ $_->xref()->pequel_ref()->pequel_name()
]}::@{[ $_->xref()->target_name() ]}");
$self->user_prog()->code();
$self->user_prog()->over();
if (defined($_->description())) {
$self->user_prog()->code("@{[ $_->description() ]}");
$self->user_prog()->code();
}
$self->user_prog()->code("F<@{[ $_->xref()->xref_key() ]}>");
$self->user_prog()->code();
$self->user_prog()->code("F<@{[ $_->pequel_type()->name() ]}>");
$self->user_prog()->code();
if ($_->name() =~ /^_/)
{
$self->user_prog()->code("F<Transparent>");
$self->user_prog()->code();
}
if ($_->isa('ETL::Pequel3::Type::Field::TransferField'))
{
$self->user_prog()->code("F<Transfer>");
$self->user_prog()->code();
}
if (defined($_->aggregate_type()))
{
$self->user_prog()->code("B<Aggregated>");
$self->user_prog()->code();# if ($self->doc_ref()->target_fmt() ne 'pdf');
$self->user_prog()->over();
$self->user_prog()->code("@{[
$_->aggregate_type()->name()
]}(@{[
$_->input_field()->name()
]}) @{[
defined($_->condition_exp()) ? $_->condition_exp() : ''
]}");
$self->user_prog()->code();
$self->user_prog()->back();
}
if (defined($_->calc_exp()))
{
$self->user_prog()->code("B<Derived>");
$self->user_prog()->code();# if ($self->doc_ref()->target_fmt() ne 'pdf');
$self->user_prog()->over();
$self->user_prog()->code("B<=> " . do{my $t=$_->calc_exp(); $t=~s/E</E </g; $t=~s/>/E<gt>/g; $t});
$self->user_prog()->code();
$self->user_prog()->back();
}
if ($_->xref()->_ref_list()->size())
{
$self->user_prog()->code("B<References>");
$self->user_prog()->code();# if ($self->doc_ref()->target_fmt() ne 'pdf');
$self->user_prog()->over();
foreach my $r (grep($_->obj_ref()->can('xref'), $_->xref()->_ref_list()->to_array()))
{
$self->user_prog()->code("@{[
('E<' . ($r->direction() eq '<' ? 'lt' : 'gt') . '>') x 1
]} @{[
$r->obj_ref()->xref()->xref_key()
]}");
$self->user_prog()->code();
}
$self->user_prog()->back();
}
$self->user_prog()->back();
}
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::DocGen::Chapter::Table;
use base qw(ETL::Pequel3::Type::Document::Chapter::Abstract);
use Class::STL::ClassMembers qw( table_ref ),
Class::STL::ClassMembers::DataMember->new(name => 'chapter_name', default => '_table');
use Class::STL::ClassMembers::Constructor;
sub input_dataset_tree # recursive
{
my $self = shift;
my $dataset = shift;
my $name = shift;
$self->user_prog()->code("E<lt> F<$name> (@{[ $dataset->name() ]})") if (defined($name));
$self->user_prog()->over();
$self->user_prog()->code("E<lt> @{[
$dataset->datasource()->target_name()
]} (@{[
$dataset->datasource()->datasource_name()
]}) @{[
$dataset->shared() ? ' -- B<shared>' : ''
]}");
$self->input_dataset_tree(
$dataset->pequel_ref()->exists($dataset->datasource()->target_name())
->input()->input_dataset()
)
if ($dataset->datasource()->datasource_name() eq 'pequel');
$self->user_prog()->back();
$self->user_prog()->code();
}
sub prepare
{
my $self = shift;
$self->user_prog()->head2("Table Type");
$self->user_prog()->code("F<@{[ (split(/[:]+/, ref($self->table_ref())))[-1] ]}>");
$self->user_prog()->code();
$self->user_prog()->head2("Table Fields");
foreach ($self->table_ref()->fields()->to_array())
{
$self->user_prog()->item("@{[ $_->xref()->target_name() ]}");
$self->user_prog()->over();
$self->user_prog()->code("F<@{[ $_->xref()->xref_key() ]}>");
$self->user_prog()->code();
$self->user_prog()->code("ds_column: B<@{[ $_->ds_column() ]}>") if (defined($_->ds_column()));
$self->user_prog()->code() if (defined($_->ds_column()));
if ($_->xref()->_ref_list()->size())
{
$self->user_prog()->code("B<References>");
$self->user_prog()->code() if ($self->doc_ref()->target_fmt() ne 'pdf');
$self->user_prog()->over();
foreach my $r (grep($_->obj_ref()->can('xref'), $_->xref()->_ref_list()->to_array()))
{
$self->user_prog()->code("@{[
('E<' . ($r->direction() eq '<' ? 'lt' : 'gt') . '>') x 1
]} @{[
$r->obj_ref()->xref()->xref_key()
]}");
$self->user_prog()->code();
}
$self->user_prog()->back();
}
$self->user_prog()->back();
}
# Data Flow Summary
$self->user_prog()->head2("Data Flow Summary");
($self->table_ref()->can('input_dataset'))
? $self->input_dataset_tree($self->table_ref()->input_dataset())
: $self->user_prog()->code("I<local>");
}
}
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::DocGen::Chapter::PequelGenerated;
use base qw(ETL::Pequel3::Type::Document::Chapter::Abstract);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'show_chapter_number', default => 0),
Class::STL::ClassMembers::DataMember->new(name => 'chapter_name', default => 'pequel_generated');
use Class::STL::ClassMembers::Constructor;
sub prepare
{
my $self = shift;
$self->user_prog()->begin();
$self->user_prog()->code($self->POM()->generator()->user_prog()->display());
$self->user_prog()->code();
$self->user_prog()->end();
}
}
# ----------------------------------------------------------------------------------------------------
# CHAPTER TYPE CATALOGUE
# ----------------------------------------------------------------------------------------------------
{
package ETL::Pequel3::DocGen::Chapter::Catalogue;
use base qw(ETL::Pequel3::Type::Catalogue);
use Class::STL::ClassMembers
Class::STL::ClassMembers::DataMember->new(name => 'catalogue_name', default => 'doc_chapters'),
Class::STL::ClassMembers::DataMember->new(name => 'target_mem_name', default => 'chapter_name'),
Class::STL::ClassMembers::DataMember->new(name => 'element_type', default => 'ETL::Pequel3::Type::Document::Chapter::Abstract');
use Class::STL::ClassMembers::SingletonConstructor;
sub new_extra
{
my $self = shift;
$self->push_back(
ETL::Pequel3::DocGen::Chapter::PequelName->_new(),
ETL::Pequel3::DocGen::Chapter::Input->_new(),
ETL::Pequel3::DocGen::Chapter::Output->_new(),
ETL::Pequel3::DocGen::Chapter::Table->_new(),
#> ETL::Pequel3::DocGen::Chapter::DataSets->_new(),
#> ETL::Pequel3::DocGen::Chapter::AggregateUsageSummary->_new(),
#> ETL::Pequel3::DocGen::Chapter::MacroUsageSummary->_new(),
ETL::Pequel3::DocGen::Chapter::PequelScript->_new(),
ETL::Pequel3::DocGen::Chapter::UserScript->_new(),
ETL::Pequel3::DocGen::Chapter::UserXml->_new(),
ETL::Pequel3::DocGen::Chapter::PequelGenerated->_new(),
ETL::Pequel3::DocGen::Chapter::SubPequels->_new(),
);
return $self;
}
}
# ----------------------------------------------------------------------------------------------------
1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -