##### タイトルの取得 ##### ($0 ~ /<title>/){ titlestr=$0 while(titlestr !~ /<\/title>/){ if(getline<=0){ errorexit=1; exit } titlestr = titlestr $0 } sub(/.*<title>[ \t]*/,"",titlestr) sub(/[ \t]*<\/title>.*/,"",titlestr) next } ##### 見出し部分の取得 ##### ($0 ~ / CONTENTS_TITLE_TABLE/){ # 不要な行の読み飛ばし while($0 !~ /<font size/) if(getline<=0){ errorexit=2; exit } # headline に行を保存 headline=$0 while(headline !~ /<\/small>/){ if(getline<=0){ errorexit=3; exit } headline = headline $0 } # 不要なタグ (font,small) を削除 gsub(/<\/?font[^>]*>/,"",headline) sub(/[ \t]*<small>[ \t]*/,"",headline) sub(/[ \t]*<\/small>.*/,"",headline) while($0 !~ /\/CONTENTS_TITLE_TABLE/) if(getline<=0){ errorexit=4; exit } next } ##### 記事本文の取得 ##### # N_ot = 何回目の OUTLINE_TABLE ブロックであるか ($0 ~ / OUTLINE_TABLE/){ N_ot++ } # 最初の OUTLINE_TABLE ブロックのときだけ実行 (N_ot==1 && $0 ~ / OUTLINE_TABLE/){ # 不要な部分を読み飛ばし while($0 !~ /<font size/) if(getline<=0){ errorexit=5; exit } # 本文の保存 (body[1] ~ body[N_body]) N_body=0 do{ if($0 ~ /<\/?font/) gsub(/<\/?font[^>]*>/,"") body[++N_body]=$0 if(getline<=0){ errorexit=6; exit } }while($0 !~ /<div/) # 本文の最後の <div> タグ部分を改行 (<br>) に変換して保存 sub(/<div[^>]*>/,"<br>") body[++N_body]=$0 # </div> までを保存 while($0 !~ /<\/div/){ if(getline<=0){ errorexit=7; exit } body[++N_body]=$0 } # </div> タグは単に削除 sub(/<\/div>/,"",body[N_body]) next } ##### Copyright 以下の部分の取得 ##### ($0 ~ /\/YBB module/){ while($0 !~ /Copyright/) if(getline<=0){ errorexit=8; exit } N_tail=0 do{ gsub(/<\/?small>/,"") gsub(/<\/?center>/,"") tail[++N_tail]=$0 }while($0 !~ /<\/html>/ && getline>0) exit } ##### END ブロック ##### END{ if(errorexit){ printf "エラー発生 (code = %d)\n",errorexit > "/dev/stderr" exit } putheader(titlestr,headline) putbody(body,N_body) puttail(tail,N_tail) } ##### 出力関数 ##### # ヘッダ部分の出力関数 function putheader(titlestr,headline) { print "<html>" print "<head>" printf "<title>%s</title>\n",titlestr print "</head>" print "<body>" printf "<h1>%s</h1>\n",titlestr printf "%s<hr>\n",headline } # 本文の出力関数 function putbody(body,N, j) { for(j=1;j<=N;j++) print body[j] } # 最後の部分の出力関数 function puttail(tail,N, j) { print "<hr>" for(j=1;j<=N;j++) print tail[j] }