Web��ǤΡ�ʸ��Ū�ץ�����ߥ󥰡�

�����Ƿ @ pitecan.com

ʸ��Ū�ץ�����ߥ󥰤Ȥ�

��ʸ��Ū�ץ�����ߥ��פȤϡ� ������ե�������ؤ�Donald Knuth���󾧤��Ƥ��롢 �ץ������κ����Ȥ���ʸ�񲽤�Ʊ���˹Ԥʤ���ˡ�ǡ� �ץ������Ȥ��β���ʸ���ҤȤĤΥե�����˺��ߤ����ʤ��� �ɲä����꽤�������ꤷ��Ʊ���˳�ȯ���Ƥ������Ȥˤ�ꡢ �������������ΤȤ줿ʸ��ȥץ�������ȯ���褦�Ȥ�����ΤǤ��롣 �ץ�������ޤ���äƤ��餽�β���ʸ����������(�ޤ��Ϥ��ε�)�Ȥ��� ����Ū�ʼ�ˡ�Ǥϡ���ǽ����ʤɤ�ä�����ʤɤ����դ��ʤ��� ξ�Ԥ����������Ȥ�ʤ��ʤäƤ��ޤ����Ȥ��褯���뤬�� ʸ��Ū�ץ�����ߥ󥰤μ�ˡ�Ǥ� ξ�Ԥ��ҤȤĤΥե�����ˤʤäƤ���Τ� ���Τ褦�ʤ��Ȥ�������ˤ����ʤ롣 �ޤ�������ʸ���񤯤Ȥ�����Ȥ��������ץ�������񤯤Ȥ�����Ȥ� ��ߺ��Ѥˤ�äƤ��Ŭ�ڤʥץ�������ʸ�񤬤Ǥ�������Ȥ��� ���̤����롣

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

WEB���

WEB�ν����Ͽ�1�Τ褦�˹Ԥʤ��롣


��1: WEB���

WEBʸ���ʣ���Υץ������⥸�塼��ν���Ȥ������ˤʤäƤ��ꡢ �ƥ⥸�塼��Ϥ��β�����ʬ�ȥץ��������ʬ�Ȥǹ�������롣 WEBʸ���tangle�Ȥ����ץ��������̤��� �ץ����������������Ф���ƤҤȤĤ�Pascal�ץ������ˤʤꡢ weave�Ȥ����ץ��������̤��Ȳ������ȥץ���������� ξ����ͻ�礷��TeX��ʸ��ˤʤ롣 �����Ǥϥץ�����������������ե����ޥåȤ��졢 �⥸�塼����˾�Ω�Ƥ��Ԥʤ�졢 �ܼ�������ⴰ�����������ʥɥ�����Ȥ���������롣 ���Τ褦�ˡ��ҤȤĤ�WEB�ե����뤫��ץ������� ���Υɥ�����Ȥ�ξ�����������뤳�Ȥ��Ǥ���Τ���Ĺ�Ǥ��롣

WEB on Web

�������줿WEBʸ��򸫤뤿��ˤϡ���1�Τ褦�� weave�ˤ�ä�TeXʸ����Ѵ����Ƥ��� TeX�ǥե����ޥåȤ�Ԥʤ���dvi2ps�ʤɤ� ���������ˤ���ɬ�פ������롣���ξ�硢 weave/TeX/dvi2ps/ghostscript ����Ŭ�Ѥ���ɬ�פ����������ˤ鷺��路���Τǡ� ��Ȥ����ˤ˹Ԥʤ��ˤ����Ȥ������꤬���롣

WEBʸ��Τ��������̤�HTML�ե������Ȥ��褦�ˤ���� ���Τ褦������ϲ�褹��ȹͤ����롣 �ץ�������HTML�ե��������˵��Ҥ���Ȥ��������� ʸ��Ū�ץ�����ߥ󥰤�Ԥʤ����Ȥˤ���С� tangle����������ץ�������ɬ�פǤ��뤬�� weave��Ϣ�ץ������Ϥ��٤ƾ�ά���� ľ��HTML�ե������֥饦����į��뤳�Ȥ��Ǥ��롣 HTML�ե�������Ф��� tangle���������������Ԥʤ� wtangle�ץ�������ȯ������

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';
}

�ᥤ��롼����

HTML�ե��������� <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���ޥ�ɤ���Ѥ��Ƥ��롣

���ۤʤ�

�ºݤΤȤ����� �ץ�������񤯤��Ӥ�WEBʸ���HTML�����ܤ˵��Ҥ���Τ� �ȤƤ����ݤʤΤǡ� ���̤Υץ�����೫ȯ��ʸ��Ū�ץ�����ߥ󥰤μ�ˡ��Ŭ�� ����ΤϤ���ä�̵��������褦�˻פ��� �����������ץ󥽡����Ȥ��ƥץ�����ߥ󥰤�������褦�Ȥ������䡢 �ץ�����ߥ󥰤β���򤷤��궵�ʽ��񤤤��ꤹ��褦�ʾ��ˤ� ���������������ʤΤǤϤʤ����ȻפäƤ��롣 �����ܤ˿ޤ�����񤯤Τ����ݤ��⤷��ʤ����� �ץ������˼�񤭤�GIF��ź�դ�������Ǥ� ��ǻפ��Ф����ꤹ��Τ��������������� �������Ϣ����ؤΥ�󥯤�ź�դ���ˤ������Ǥ������� �ͤ˸����뵡�񤬤���ץ������/ ��������Ѥ����ǽ��������ץ������/ ʣ���ʥ��르�ꥺ���Ĥ��ä��ץ������ �ʤɤϤʤ�٤����μ�ˡ���������Ƥߤ褦���ȻפäƤ��롣

��������

  • 2001��������
  • �ǽ�����: $Date: 2006-12-18 13:08:50 -0800 (Mon, 18 Dec 2006) $