[PR]ÃÚËÞ”Ô‘g•\
¡–é‚̔ԑgÁª¯¸

Jul 12, 2008 (Sat)

/diary/blog

ã¯ã¦ãªã®åå‰ä»˜ãã‚¿ã‚°ã®ä»¶ã€‚

  • 日々 æ–‡å¥ã‚’書ã„ã¦ã„ã‚‹ã†ã¡ã«ã€ã¨ã†ã¨ã†é ­ã«ãã¦ã€ 䏿œ¬æ„ãªãŒã‚‰ quick and dirty 㪠perl script を書ã„ã¦ã€ æ—¢å­˜ã®æ—¥è¨˜ç´„1ï¼å¹´åˆ†ã®ãƒã‚¤ãƒ•ンを使ã£ãŸ name tag をアンダースコアã«å¤‰æ›´ã—ãŸã€‚ (ã¨ã“ã‚ã§ä¸€ä½“ã€ä½•ãŒä¸æœ¬æ„ãªã‚“ã ã‚ㆠ-- ã¯ã¦ãªãŒå¯¾å¿œã›ãšã«ã€ 自分ãŒã—ã¦ã—ã¾ã£ãŸã“ã¨ã«ã€ãªã‚“ã ã‚ã†ã‘れã©ã€ ãã‚“ãªä¸‹ã‚‰ãªã„ã“ã¨ã«æ„地を張らãªãã¦ã‚‚ã„ã„ã®ã«ã¨ã€æˆ‘ãªãŒã‚‰æ€ã†ã€‚)
  • ã©ã‚“ãªã« quick ã§ dirty ãªã‚³ãƒ¼ãƒ‰ã‹çŸ¥ã‚ŠãŸã„人もã„ã‚‹ã‹ãªã€ã¨æ€ã†ã®ã§ã€ ã¿ã‚“ãªã®ç›®ã‚’汚ã—ã¦ã—ã¾ãŠã†ï¼š
    >|perl|
    #!/usr/bin/perl
    
    use Jcode;
    
    sub adj_pics ($);
    sub usage ;
    
    sub execute ($);
    
    $cmd_mv    = "/bin/mv";
    $cmd_rm    = "/bin/rm";
    $cmd_nkf   = "/usr/local/bin/nkf";
    
    $output  = "index.html";
    $tmpfile = "tmp.html";
    
    @argv = @ARGV;
    foreach $i (@argv) {
    	adj_pics($i);
    }
    
    exit 0;
    
    ## sub routines
    
    sub execute ($) {
        my $c = shift;
        print STDERR "$c\n";
        system($c) == 0 or die "failed: $c";
        1;
    }
    
    # adj pics
    sub adj_pics ($) {
        my ($html) = @_;
    
        open(HTMLFILE, "< $html") or die "Cannot open $html";
        open(NEWHTMLFILE, "> $tmpfile") or die "Cannot open $tmpfile";
        while (<HTMLFILE>) {
    	# convert input-line into utf8
    	Jcode::convert ( \$_, "utf8");
    
    	$line = $_;
    
    	if (/<a id="d\d{1,2}-(.*)" name="d\d{1,2}-(.*)">/) {
    	    $old = $1;
    	    if ($old =~ /-/) {
    		$new = $old;
    		$new =~ s/-/_/g;
    		$line =~ s/$old/$new/g;
    	    }
    	}
    	elsif (/<a href="#d\d{1,2}-(.*)">/) {
    	    $old = $1;
    	    if ($old =~ /-/) {
    		$new = $old;
    		$new =~ s/-/_/g;
    		$line =~ s/$old/$new/g;
    	    }
    	}
    	elsif (/<a href="diary\d{4}_\d{2}.shtml#d\d{1,2}-(.*)">/) {
    	    $old = $1;
    	    if ($old =~ /-/) {
    		$new = $old;
    		$new =~ s/-/_/g;
    		$line =~ s/$old/$new/g;
    	    }
    	}
    
    	print NEWHTMLFILE $line;
        }
        close NEWHTMLFILE;
        close HTMLFILE;
        execute ("$cmd_nkf -j $tmpfile > $output");
        execute ("$cmd_rm $tmpfile");
        execute ("$cmd_mv $output $html");
    
        1;
    }
    ||<
      
    (付記:ã†ã‚€ã€ HTML ã§ã¯ã›ã£ã‹ã escape ã—ãŸæ–‡å­—ãŒã€ hw 用ã«å¤‰æ›ã—ãŸéš›ã« 戻ã£ã¦ã„るよã†ã§ã€ãƒ¡ã‚¿ãƒ¡ã‚¿ã ãªã€ã‚‚ã†é¢å€’ãªã®ã§ã€ã“ã‚Œã¯æ”¾ã£ã¦ãŠã。 見ãŸã„人ã¯ã“ã¡ã‚‰ã¸ â€¦â€¦ã¨æ€ã£ãŸãŒã€ã‚³ãƒ¼ãƒ‰ã‚’æ›¸ãæ–¹æ³•ã¯ãã£ã¨ã‚ã‚‹ã ã‚ã†ã¨è¦‹ãŸã‚‰ スーパーpre記法 ã¨ã„ã†ã®ãŒã‚ã£ãŸã®ã§ã€ä¸€å¿œãã„ã¤ã§æŒŸã‚“ã§ãŠã。ã—ã‹ã—
    ※「<||ã€ã€Œ||>ã€ã¯å¿…ãšè¡Œé ­ã«ãªã‚‹ã‚ˆã†è¨˜è¿°ã—ã¦ãã ã•ã„。
    ã¨ã‹ã£ã¦ä½•ãŒã€Œã‚¹ãƒ¼ãƒ‘ーã€ãªã‚“ã ã‚ã†ãªâ€¦â€¦ local rule ã¯å«Œã„ã ï¼ˆã£ã¦ã€æ–‡å¥è¨€ã„éŽãŽï¼Ÿï¼‰ï¼‰
  • ä½¿ã„æ–¹ã¯ã€å…ƒãƒ‡ãƒ¼ã‚¿ï¼ˆã¤ã¾ã‚Š infoseek ã®æ—¥è¨˜ã«ä½¿ã£ã¦ã„ã‚‹ HTML)を食ã‚ã›ã‚‹ã ã‘。 複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’åŒæ™‚ã«ä¸Žãˆã¦ã‚‚良ã„ã®ã§ã€ backup ã‚’ã¨ã£ãŸå¾Œã§
    perl html-mod-hatena.pl *.shtml
    一発ã§çµ‚ã‚り。
  • ã©ã®è¾ºã‚ŠãŒæ‰‹æŠœãã‹ã¨ã„ã†è§£èª¬ã¯ã€æ˜Žã‚‰ã‹ã«è›‡è¶³ã ã‘ã©ä¸€å¿œã—ã¦ãŠãã¨ã€ 漢字コードを perl 処ç†ã®å‰ã« Jcode ã§ utf-8 ã«ã—ã¦ãŠã„ã¦ã€ ã§ããŸçµæžœã¯ nkf ã§ jis ã«ã‚‚ã©ã—ã¦ãŸã‚Šã€ HTML ã¯ãã¡ã‚“㨠parse ãªã©ã›ãšã«ç›®æ¨™ã®ã‚¿ã‚°ã®æ±ºã‚打ã¡ã ã—〠一行ã«ï¼’ã¤ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒç™ºç”Ÿã—ãŸæ™‚ã¯ã†ã¾ã処ç†ã§ããªã„ (ãã†ã„ã†ã‚±ãƒ¼ã‚¹ã¯ã»ã¨ã‚“ã©ãªã‹ã£ãŸã‘ã©ã€ä¸€ãƒ¶æ‰€ã ã‘ã‚ã£ã¦ã€æœ¬æ–‡ã«æ‰‹ã‚’入れãŸã€‚ ã¨è¨€ã£ã¦ã‚‚〠HTML ã§æ›¸ã„ã¦ã„る当該ã®è¡Œã‚’改行ã—ãŸã ã‘ã ã‘ã©ï¼‰ ãªã©ãªã©ã€‚ã¾ã‚一回切りã®ä½¿ã„æ¨ã¦ã‚³ãƒ¼ãƒ‰ãªã®ã§ã€æ–‡å¥ã¯ãªã—ã€ã¨ã€‚
  • 蛇足ã¤ã„ã§ã«ã€å½“ã® script ã®æ¥æ­´ã‚’言ã£ã¦ãŠãã¨ã€ ã¤ã¾ã‚Šã“れã¯ç§ãŒã™ã¹ã¦ scratch ã‹ã‚‰æ›¸ã„ãŸã‚‚ã®ã§ã¯ãªãã¦ã€ 大本ã¯ã€é¥ã‹æ˜”ã® ã»ãã‹ã‚ãŸã¤ã¿ã•ん㮠絵日記をåã script をベースã«ã—ãŸè‡ªåˆ†ã® script ã§ã€ HTML 絡ã¿ã® quick-and-dirty ãªå‡¦ç†ãŒå¿…è¦ã«ãªã‚‹åº¦ã« ãã„ã¤ã‹ã‚‰åˆ‡ã‚Šå‡ºã—ã¦ã€æ‰‹ã‚’入れã¦ã€ã¨ç¹°ã‚Šè¿”ã—ã¦ããŸã‚‚ã®ã€‚ æ•…ã« adj_pics ãªã©ã¨ã„ㆠsubroutine name ã«ãªã£ã¦ã„ã‚‹ã®ã§ã™ (ã¨ã¯è¨€ãˆã€ã»ã¨ã‚“ã©åŽŸå½¢ã¯ã¨ã©ã‚ã¦ã„ãªã„ã¨ã¯æ€ã†ã‘れã©ï¼‰ã€‚
  • 付記(7/13/2008): blosxom ã§ã‚‚ escape ã—ã¦ãªã„ pre ã§ã²ã©ã„ã“ã¨ã«ãªã£ã¦ã„ãŸã€‚ ã¨ã„ã†ã“ã¨ã§ diary2blosxom.pl ã§ pre ã®æ™‚ã« escape ã™ã‚‹ã‚ˆã†ã«ã—㟠(ãã†ã€ã“れã¾ã§ã¯ã—ã¦ã„ãªã‹ã£ãŸã®ã§ã™ï¼‰ã€‚ diary2hw.pl ã®æ–¹ã¯ã€ã‚¹ãƒ¼ãƒ‘ーpre記法を噛ã¾ã—ã¦ã„ã‚‹ã®ã§ã€ ã‚€ã—ã‚ escape ã—ãªã„æ–¹ãŒã„ã„ã®ã‹ãªã€ã¨æ€ã£ã¦æ”¾ç½®ã€‚ ãれã‹ã‚‰ã€ä¸Šã® matching ㌠greedy ãªã®ã§å•題を起ã“ã™å ´åˆãŒã‚ã£ãŸã€‚ ã“れã€ã„ã¤ã‚‚æ‚©ã¾ã•れるãƒã‚¤ãƒ³ãƒˆã ãªã€‚å¤šåˆ†ã€æ­£è¦è¡¨ç¾ã®d\d{1,2}-(.*) ã‚’d\d{1,2}-(.*?) ã«ã™ã‚Œã°ã‚ˆã‹ã£ãŸã®ã ã‚ã†ã€‚ ã‚ã¨ã€ï¼‘行ã«ï¼’ã¤ã®ç½®æ›ãŒå¿…è¦ãªå¥´ã¯ã€ 何も考ãˆãšã« script ã«äºŒå›žé£Ÿã‚ã›ã¦ã‚‚よã‹ã£ãŸã€‚ ã¤ã„ã§ã« diary2blosxom.pl 㨠diary2hw.pl もスーパーpre記法ã§ã•らã—ã¦ãŠã。
perm link - Posted at 00:03 | comment (0)