⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 docgen.pm

📁 普通的ETL工具
💻 PM
📖 第 1 页 / 共 2 页
字号:
				{
					$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 + -