晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /usr/share/autoconf/Autom4te/ |
Upload File : |
# autoconf -- create `configure' using m4 macros
# Copyright (C) 2003, 2006, 2009-2012 Free Software Foundation, Inc.
# This program 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, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
package Autom4te::C4che;
=head1 NAME
Autom4te::C4che - a single m4 run request
=head1 SYNOPSIS
use Autom4te::C4che;
=head1 DESCRIPTION
This Perl module handles the cache of M4 runs used by autom4te.
=cut
use Data::Dumper;
use Autom4te::Request;
use Carp;
use strict;
=over 4
=item @request
List of requests.
We cannot declare it "my" as the loading, performed via "do", would
refer to another scope, and @request would not be updated. It used to
work with "my" vars, and I do not know whether the current behavior
(5.6) is wanted or not.
=cut
use vars qw(@request);
=item C<$req = Autom4te::C4che-E<gt>retrieve (%attr)>
Find a request with the same path and input.
=cut
sub retrieve($%)
{
my ($self, %attr) = @_;
foreach (@request)
{
# Same path.
next
if join ("\n", @{$_->path}) ne join ("\n", @{$attr{path}});
# Same inputs.
next
if join ("\n", @{$_->input}) ne join ("\n", @{$attr{input}});
# Found it.
return $_;
}
return undef;
}
=item C<$req = Autom4te::C4che-E<gt>register (%attr)>
Create and register a request for these path and input.
=cut
# $REQUEST-OBJ
# register ($SELF, %ATTR)
# -----------------------
# NEW should not be called directly.
# Private.
sub register ($%)
{
my ($self, %attr) = @_;
# path and input are the only ID for a request object.
my $obj = new Autom4te::Request ('path' => $attr{path},
'input' => $attr{input});
push @request, $obj;
# Assign an id for cache file.
$obj->id ("$#request");
return $obj;
}
=item C<$req = Autom4te::C4che-E<gt>request (%request)>
Get (retrieve or create) a request for the path C<$request{path}> and
the input C<$request{input}>.
=cut
# $REQUEST-OBJ
# request($SELF, %REQUEST)
# ------------------------
sub request ($%)
{
my ($self, %request) = @_;
my $req =
Autom4te::C4che->retrieve (%request)
|| Autom4te::C4che->register (%request);
# If there are new traces to produce, then we are not valid.
foreach (@{$request{'macro'}})
{
if (! exists ${$req->macro}{$_})
{
${$req->macro}{$_} = 1;
$req->valid (0);
}
}
# It would be great to have $REQ check that it is up to date wrt
# its dependencies, but that requires getting traces (to fetch the
# included files), which is out of the scope of Request (currently?).
return $req;
}
=item C<$string = Autom4te::C4che-E<gt>marshall ()>
Serialize all the current requests.
=cut
# marshall($SELF)
# ---------------
sub marshall ($)
{
my ($caller) = @_;
my $res = '';
my $marshall = Data::Dumper->new ([\@request], [qw (*request)]);
$marshall->Indent(2)->Terse(0);
$res = $marshall->Dump . "\n";
return $res;
}
=item C<Autom4te::C4che-E<gt>save ($file)>
Save the cache in the C<$file> file object.
=cut
# SAVE ($FILE)
# ------------
sub save ($$)
{
my ($self, $file) = @_;
confess "cannot save a single request\n"
if ref ($self);
$file->seek (0, 0);
$file->truncate (0);
print $file
"# This file was generated.\n",
"# It contains the lists of macros which have been traced.\n",
"# It can be safely removed.\n",
"\n",
$self->marshall;
}
=item C<Autom4te::C4che-E<gt>load ($file)>
Load the cache from the C<$file> file object.
=cut
# LOAD ($FILE)
# ------------
sub load ($$)
{
my ($self, $file) = @_;
my $fname = $file->name;
confess "cannot load a single request\n"
if ref ($self);
my $contents = join "", $file->getlines;
eval $contents;
confess "cannot eval $fname: $@\n" if $@;
}
=head1 SEE ALSO
L<Autom4te::Request>
=head1 HISTORY
Written by Akim Demaille E<lt>F<akim@freefriends.org>E<gt>.
=cut
1; # for require
### Setup "GNU" style for perl-mode and cperl-mode.
## Local Variables:
## perl-indent-level: 2
## perl-continued-statement-offset: 2
## perl-continued-brace-offset: 0
## perl-brace-offset: 0
## perl-brace-imaginary-offset: 0
## perl-label-offset: -2
## cperl-indent-level: 2
## cperl-brace-offset: 0
## cperl-continued-brace-offset: 0
## cperl-label-offset: -2
## cperl-extra-newline-before-brace: t
## cperl-merge-trailing-else: nil
## cperl-continued-statement-offset: 2
## End: