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

📄 document.pm

📁 普通的ETL工具
💻 PM
字号:
# vim:ts=4 sw=4# ----------------------------------------------------------------------------------------------------#  Name		: ETL::Pequel3::Type::Document.pm#  Created	: 21 September 2006#  Author	: Mario Gaffiero (gaffie)## Copyright 1999-2007 Mario Gaffiero.# # This file is part of Pequel(TM).# # Pequel is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; version 2 of the License.# # Pequel is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.# # You should have received a copy of the GNU General Public License# along with Pequel; if not, write to the Free Software# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA# ----------------------------------------------------------------------------------------------------# Modification History# When          Version     Who     What# ----------------------------------------------------------------------------------------------------package ETL::Pequel3::Type::Document;require 5.005_62;use strict;use warnings;use stl;# ----------------------------------------------------------------------------------------------------# DOCUMENT TYPE# ----------------------------------------------------------------------------------------------------{	package ETL::Pequel3::Type::Document::Abstract;	use base qw(Class::STL::Element);	use Class::STL::ClassMembers 		qw( 			err 			catalogue 			properties 			document_name 			chapters 			user_prog 			doc_type			doc_title			doc_version			doc_email			doc_author			doc_filename			POM		),		Class::STL::ClassMembers::DataMember->new(name => 'target_fmt', default => 'pdf', validate => '^(pod|pdf|docbook)$'),		Class::STL::ClassMembers::DataMember->new(name => 'show_copyright', default => 0);	use Class::STL::ClassMembers::Constructor;	sub new_extra	{		my $self = shift;		use ETL::Pequel3::Error;		$self->err(ETL::Pequel3::Error->new());		use ETL::Pequel3::Type::Catalogue;		$self->catalogue(ETL::Pequel3::Catalogue->new());		$self->properties($self->catalogue()->properties());		use Class::CodeStyler;		$self->user_prog(Class::CodeStyler::Program::Pod->new(			program_name => $self->POM()->makefilepath($self->doc_filename())		));		$self->chapters(ETL::Pequel3::Type::Document::Chapters->new(doc_ref => $self));		return $self;	}	sub build	{		my $self = shift;		$self->chapters()->add(ETL::Pequel3::Type::Document::Chapter::Copyright->new())			if ($self->show_copyright() && !$self->chapters()->exists('copyright'));		map		(			do {				$_->open_chapter() unless ($_->hidden());				$_->prepare();			}, 			$self->chapters()->to_array()		);		$self->user_prog()->prepare();		$self->user_prog()->save();	}	sub make_pdf	{		my $self = shift;		use ETL::Pequel3::Pod2Pdf;		return ETL::Pequel3::Pod2Pdf::pod2pdf( # return pdf file path-name;			'--type' => $self->doc_type(),			'--title' => $self->doc_title(),			'--version' => $self->doc_version(),			'--email' => $self->doc_email(),			'--author' => $self->doc_author(),			$self->user_prog()->program_name()		);	}}# ----------------------------------------------------------------------------------------------------{	package ETL::Pequel3::Type::Document::Chapters;	use base qw(ETL::Pequel3::Type::Catalogue);	use Class::STL::ClassMembers qw( doc_ref ),		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::Constructor;	sub add	{		my $self = shift;		foreach (@_) 		{			$self->push_back($_);			my $ch = $self->back();			$ch->minor($self->size());			$ch->doc_ref($self->doc_ref());			$ch->POM($self->doc_ref()->POM());			$ch->user_prog($self->doc_ref()->user_prog());		}	}}# ----------------------------------------------------------------------------------------------------# CHAPTER TYPE# ----------------------------------------------------------------------------------------------------{	package ETL::Pequel3::Type::Document::Chapter::Abstract;	use base qw(Class::STL::Element);	use Class::STL::ClassMembers 		qw( 			POM			doc_ref			err 			catalogue 			properties 			user_prog 			chapter_name 			chapter_name_sub			chapter_name_desc 			major 			minor 		),		Class::STL::ClassMembers::DataMember->new(name => 'show_chapter_number', default => 1),		Class::STL::ClassMembers::DataMember->new(name => 'hidden', default => 0),		Class::STL::ClassMembers::DataMember->new(name => 'new_page', default => 1);	use Class::STL::ClassMembers::Constructor;	sub new_extra	{		my $self = shift;		use ETL::Pequel3::Error;		$self->err(ETL::Pequel3::Error->new()); # Singleton		use ETL::Pequel3::Catalogue;		$self->catalogue(ETL::Pequel3::Catalogue->new());		$self->properties($self->catalogue()->properties());		$self->chapter_name_desc( 			do{				my $n=$self->chapter_name(); 				$n=~s/[\W_]+/ /g; 				$n=~s/((^\w)|(\s\w))/\U$1/g; 				$n=~s/([\w]+)/\u\L$1/g; 				$n=~s/^\s+//;				defined($self->chapter_name_sub()) ? $n . ' -- ' . $self->chapter_name_sub() : $n;			}		) if (defined($self->chapter_name()));	}	sub open_chapter	{		my $self = shift;		$self->user_prog()->divider();		$self->user_prog()->page() if ($self->new_page() && $self->doc_ref()->target_fmt() eq 'pdf');		$self->user_prog()->head1("@{[ 			$self->show_chapter_number() 			&& defined($self->major()) 			&& $self->major() ne '' 				? ($self->major() . '. ') : '' 		]}@{[ 			$self->show_chapter_number() 			&& defined($self->minor()) 				? ($self->minor() . ' ') : '' 		]}@{[ $self->chapter_name_desc() ]}");	}	sub prepare	{		my $self = shift;		# virtual function	}}# ----------------------------------------------------------------------------------------------------{	package ETL::Pequel3::Type::Document::Chapter::Copyright;	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 => 'copyright');	use Class::STL::ClassMembers::Constructor; 	sub prepare	{		my $self = shift;		$self->user_prog()->code("This document was generated by Pequel.");		$self->user_prog()->code();		$self->user_prog()->code();		$self->user_prog()->code("L<@{[ $self->properties()->pequel_home_page() ]}>");		$self->user_prog()->code();		$self->user_prog()->code();		$self->user_prog()->code("Copyright E<copy>1999-2007, Mario Gaffiero. All Rights Reserved.");		$self->user_prog()->code();		$self->user_prog()->code();		$self->user_prog()->code("'Pequel' TM Copyright E<copy>1999-2007, Mario Gaffiero. All Rights Reserved.");		$self->user_prog()->code();		$self->user_prog()->code();		$self->user_prog()->code("This program and all its component contents is copyrighted free software by Mario Gaffiero and is released under the GNU General Public License (GPL), Version 2, a copy of which may be found at L<http://www.opensource.org/licenses/gpl-license.html>");		$self->user_prog()->code();		$self->user_prog()->code();		$self->user_prog()->code("Pequel is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License.");		$self->user_prog()->code();		$self->user_prog()->code();		$self->user_prog()->code("Pequel is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.");		$self->user_prog()->code();		$self->user_prog()->code();		$self->user_prog()->code("You should have received a copy of the GNU General Public License along with Pequel; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA");		$self->user_prog()->code();		$self->user_prog()->code();	}}# ----------------------------------------------------------------------------------------------------# DOCUMENT TYPE CATALOGUE# ----------------------------------------------------------------------------------------------------{	package ETL::Pequel3::Type::Document::Catalogue;	use base qw(ETL::Pequel3::Type::Catalogue);	use Class::STL::ClassMembers		Class::STL::ClassMembers::DataMember->new(name => 'catalogue_name', default => 'documents'),		Class::STL::ClassMembers::DataMember->new(name => 'target_mem_name', default => 'document_name'),		Class::STL::ClassMembers::DataMember->new(name => 'element_type', default => 'ETL::Pequel3::Type::Document::Abstract');	use Class::STL::ClassMembers::SingletonConstructor;	sub new_extra	{		my $self = shift;		return $self;	}}# ----------------------------------------------------------------------------------------------------1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -