WEB�����ƥ�� ʸ��Ū�ץ�����ߥ�ٱ礹�뤿���Knuth����ȯ���������ƥ�Ǥ��롣 WEB�����ƥ�Ϥ�Ȥ��Knuth��TeX�����ƥ�Ҥ��뤿��˳�ȯ ���줿��ΤʤΤ�Pascal��TeX���оݤˤʤäƤ��뤬�� C���Ȥ���褦�ˤ���CWEB�����ƥ� C��troff�Ȥ��Ȥ߹�碌���Ȥ���cweb�����ƥࡢ Ǥ�դΥץ�����ߥ�����б������뤳�ȤΤǤ��� Spider�Ȥ��ä������ƥ�Ⳬȯ����Ƥ��롣

WEBʸ���ʣ���Υץ������⥸�塼��ν���Ȥ������ˤʤäƤ��ꡢ
�ƥ⥸�塼��Ϥ��β�����ʬ�ȥץ��������ʬ�Ȥǹ�������롣
WEBʸ���tangle�Ȥ����ץ��������̤���
�ץ����������������Ф���ƤҤȤĤ�Pascal�ץ������ˤʤꡢ
weave�Ȥ����ץ��������̤��Ȳ������ȥץ����������
ξ����ͻ�礷��TeX��ʸ��ˤʤ롣
�����Ǥϥץ�����������������ե����ޥåȤ��졢
�⥸�塼����˾�Ω�Ƥ��Ԥʤ�졢
�ܼ�������ⴰ�����������ʥɥ�����Ȥ���������롣
���Τ褦�ˡ��ҤȤĤ�WEB�ե����뤫��ץ�������
���Υɥ�����Ȥ�ξ�����������뤳�Ȥ��Ǥ���Τ���Ĺ�Ǥ��롣
weave�ˤ�ä�TeXʸ����Ѵ����Ƥ���
TeX�ǥե����ޥåȤ�Ԥʤ���dvi2ps�ʤɤ�
���������ˤ���ɬ�פ������롣���ξ�硢
weave/TeX/dvi2ps/ghostscript
����Ŭ�Ѥ���ɬ�פ����������ˤ鷺��路���Τǡ�
��Ȥ����ˤ˹Ԥʤ��ˤ����Ȥ������꤬���롣
WEBʸ��Τ��������̤�HTML�ե������Ȥ��褦�ˤ����
���Τ褦������ϲ�褹��ȹͤ����롣
�ץ�������HTML�ե��������˵��Ҥ���Ȥ���������
ʸ��Ū�ץ�����ߥ�Ԥʤ����Ȥˤ���С�
tangle����������ץ�������ɬ�פǤ��뤬��
weave��Ϣ�ץ������Ϥ��٤ƾ�ά����
ľ��HTML�ե������֥饦����į��뤳�Ȥ��Ǥ��롣
HTML�ե�������Ф���
tangle���������������Ԥʤ�
wtangle�ץ�������ȯ������
wtangle�ץ������ϡ�
HTML�ե�����Ȥ��Ƶ��Ҥ��줿���ʰ�ʸ��Ū�ץ�����ߥ�ʸ��
�ץ��������ʬ��������Ф���Perl�ץ������Ǥ��롣
��HTMLʸ����Ф���wtangle��Ŭ�Ѥ����
wtangle�ץ�����ब������Τǡ�
����ѥ���Τ褦�˥֡��ȥ��ȥ�å��˳�ȯ���Ƥ������Ȥ�
�Ǥ���Ϥ��Ǥ��롣
�ʲ���wtangle�ץ����������������Ȥ��β���Ҥ��롣
prologue()�ǥץ������ν������Ԥʤ���
main()��HTML�ե����뤫���
�ץ��������н�����Ԥʤ���
epilogue()�ǥե�����Ф���Ԥʤ���
#!/usr/bin/env perl # # wtangle - Web Tangle # &prologue; &main; &epilogue;
prologue()�Ǥ��ѿ��ν�����ʤɤ�Ԥʤ���
%SIG�˴ؿ�̾����ꤷ�Ƥ����ȡ�
signal��ȯ�������Ȥ���$SIG{�����ʥ�̾}�δؿ����ƤФ�롣
�����Ǥ�SIGINT�ʤɤ������ä�����
finish()���ƤФ��褦�ˤ��Ƥ��롣
sub prologue {
require 'cacheout.pl'; # ʣ���ե�������ϥ饤�֥��
if($#ARGV < 0){
print STDERR "wtangle --- Web Tangle\n";
print STDERR "Usage: wtangle documentfiles\n";
exit 0;
}
$SIG{'INT'} = $SIG{'TERM'} =
$SIG{'QUIT'} = $SIG{'HUP'} = 'finish';
}
<pre>,
</pre>
�ǰϤޤ줿��ʬ��ե�����˽Ф���
�ե�����̾��
<pre>�����
"file=�ե�����̾{,�ե�����̾...}"�ȵ��Ҥ��롣
HTML�ե����뤬�������줿����Ǥ�
�ץ�����༫�Τ��ѹ�����Ƥ��ʤ���礬����Τǡ�
ľ�ܥץ�������Ф�����
tmpname()�Ƿ������
�ƥ�ݥ��ե�����˰�ö�Ф������
diff()�Ǥ�ȤΥե������
��Ӥ�Ԥʤ����ۤʤäƤ�����Τߥե����������褦�ˤ��롣
sub main {
while($file = shift(@ARGV)){
unless(open(f,$file)){
print STDERR "Can't open <$file>\n";
&finish;
}
while(){
if(m#^${lt}/pre>$#){
@tmpfiles = ();
}
elsif(m#^${lt}pre\s*file=(.*)>$#){
@files = split(/,/,$1);
@tmpfiles = ();
foreach $file (@files){
$allfiles{$file} = 1;
push(@tmpfiles,&tmpname($file));
}
}
else { # cachout()��ȤäƸ��߹Ԥ�ƥե�����˽Ф�
foreach $tmpfile (@tmpfiles){
&cacheout($tmpfile);
$taghead = pack(c,60);
s/&.{0}lt;/$taghead/g;
print $tmpfile $_;
}
}
}
close(f);
}
}
sub epilogue {
foreach $file (keys %allfiles){
$tmpfile = &tmpname($file);
close($tmpfile);
if(! -e $file || &diff($tmpfile,$file)){
push(@newfiles,$file);
&move($tmpfile,$file);
chmod 0555,$file; # ����߶ػ�/�¹Բ�ǽ�ˤ���
}
}
sort @newfiles;
$n = $#newfiles + 1;
print STDERR
$n == 0 ? "No file is updated.\n" :
$n == 1 ? "File '$newfiles[0]' is updated.\n" :
"Files '".join("', '",@newfiles[0..$n-2]).
"' and '".$newfiles[$n-1]."' are updated.\n";
&finish;
}
table>�������Ѥ���ɽ�����Υꥹ�Ȥˤ��Ƥ��롣
HTML���Ѥ��Ƥ���ΤǤ��Τ褦��ɽ���������������֤��Ȥ��Ǥ��롣
sub tmpname {
local($_) = @_;
s#/#_#g;
"/tmp/stangle$_$$";
}
|
�ƥ�ݥ��˻��Ѥ����ե�����̾������롣 |
sub finish {
foreach $file (keys %allfiles){
$tmpfile = &tmpname($file);
# unlink($tmpfile) if -e $tmpfile;
}
exit;
}
|
�ƥ�ݥ��˻��Ѥ��줿�ե���������ƺ�����Ƥ��� �ץ�������λ���롣 |
sub move {
local($from,$to) = @_;
return if $from eq $to;
system "/bin/mv -f $from $to";
if($?){ # mv�¹ԥ��顼
print STDERR "Can't move $from to $to\n";
&finish;
}
}
|
�ե������ư��Ԥʤ���
��ñ�Τ���mv���ޥ�ɤ���Ѥ��Ƥ��롣
|
sub diff {
local($file1,$file2) = @_;
system "/usr/bin/diff $file1 $file2 > /dev/null";
$? >> 8; # ���ޥ�ɥ��ơ�����
}
|
�ե�������Ӥ�Ԥʤ���
��ñ�Τ���diff���ޥ�ɤ���Ѥ��Ƥ��롣
|