Jul 12, 2008 (Sat)
ã¯ã¦ãªã®åå‰ä»˜ãã‚¿ã‚°ã®ä»¶ã€‚
- 日々 æ–‡å¥ã‚’書ã„ã¦ã„ã‚‹ã†ã¡ã«ã€ã¨ã†ã¨ã†é ã«ãã¦ã€ 䏿œ¬æ„ãªãŒã‚‰ 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記法ã§ã•らã—ã¦ãŠã。





![]](/blosxom/images/digits/kichiki/rkichiki.gif)