[戻る] [ゲストブック(書込)] [ゲストブック(閲覧)]

このHPの編集について

このページは、私がいろいろ試した事をメモ感覚で書き足していくという方針で運営してい る。これによって「更新停滞」という状況を防ごうと考えたのだが、そういう方針だとタグ を打つのすら面倒に感じることがある(メモ感覚でタグを打てないわけではないが、面倒な ことには変わりない)。やはり、メモならばプレーンテキストである。

というわけで、はじめはplain2を使おうかと考えた。しかし、やってみるとどうも見映えが しない。単に私の使い方が悪いだけなのだと思うが、使い方を覚えるのも面倒だっ たため、作ってしまったのがこのスクリプトである。

なお、はっきり言ってこのスクリプトが人の役に立つとは思えない 。上で書いたとおり、人のスクリプトを使いこなすくらいならplain2を使いこなし たほうがきっと役に立つだろう。ただ、すごく簡単な仕様で拡張性高く作ったので、 興味のある人が適当に参考にでもしてくれると嬉しいなぁ、と思う。

ソースコード

#!/usr/bin/ruby

BASE=0; P=1; PRE=2; LISTT=3; LISTI=4; FORCEPRE = 5
level = BASE

filename = ARGV[0]
leng = filename.length - 4
filename = filename[0..leng]

ifp = open(filename+"pre","r")
ofp = open(filename+"html","w")

title = ifp.gets.chop

ofp.print '<?xml version="1.0" ?>',"\n"
ofp.print '<!DOCTYPE html',"\n"
ofp.print '  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"',"\n"
ofp.print '  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',"\n"
ofp.print '<html xmlns="http://www.w3.org/1999/xhtml">',"\n"
ofp.print '<head>',"\n"
ofp.print '<title>Little Penguin</title>',"\n"
ofp.print '<link href="./style.css" type="text/css" rel="stylesheet" />',"\n"
ofp.print '</head>',"\n"
ofp.print '<body background="bggrnd.png">',"\n"

ofp.print '<p>',"\n"
ofp.print '<a href="./index.html">[戻る]</a>',"\n"
ofp.print '<a href="@geobook">[ゲストブック(書込)]</a>',"\n"
ofp.print '<a href="geobook.html">[ゲストブック(閲覧)]</a>',"\n"
ofp.print '</p>',"\n"


ofp.print "\n<h1>#{title}</h1>\n\n"

while (lin = ifp.gets)
  lin.chop!


  if lin=='</pre>'
    level = BASE
    ofp.print "</pre>\n"
    next
  end

  if level==FORCEPRE
    ofp.print lin,"\n"
  end

  if lin=='<pre>'
    level = FORCEPRE
    ofp.print "<pre>\n"
    next
  end


  if level != FORCEPRE

    if (lin=~/^$/)!=nil
      case level
      when P
	ofp.print "</p>\n"
	
      when PRE
	ofp.print "</pre>\n"
	
      when LISTT
	ofp.print "</dl>\n"
	
      when LISTI
	ofp.print "</dd>\n</dl>\n"
	
      when BASE
	ofp.print "\n"
	
      end
      level = BASE
      next
    end
    
    
    if (lin=~/^\t/)==0
      case level
      when P
	ofp.print lin,"\n"
	level=P
	
      when PRE
	ofp.print lin[1..lin.length-1],"\n"
	level=PRE
	
      when LISTT
	ofp.print "<dd>\n",lin[1..lin.length-1],"\n"
	level=LISTI
	
      when LISTI
	ofp.print lin[1..lin.length-1],"\n"
	level=LISTI
	
      when BASE
	ofp.print "<pre>\n",lin[1..lin.length-1],"\n"
	level=PRE
	
      end
      next
    end
    
    
    if (lin=~/^・/)==0
      case level
      when P
	ofp.print lin,"\n"
	level=P
	
      when PRE
	ofp.print lin,"\n"
	level=PRE
	
      when LISTT
	ofp.print "<dt>",lin[2..lin.length-1],"</dt>\n"
	level=LISTT
	
      when LISTI
	ofp.print "</dd>\n<dt>",lin[2..lin.length-1],"</dt>\n"
	level=LISTT
	
      when BASE
	ofp.print "<dl>\n<dt>",lin[2..lin.length-1],"</dt>\n"
	level=LISTT
	
      end
      next
    end
    
    
    if (lin=~/^◎/)==0
      ofp.print "\n<h2>",lin[2..lin.length-1],"</h2>\n"
      next
    end
    
    
    if (lin=~/^〇/)==0
      ofp.print "\n<h3>",lin[2..lin.length-1],"</h3>\n"
      next
    end
    
    
    case level
    when P
      ofp.print lin,"\n"
      
    when BASE
      ofp.print "<p>\n",lin,"\n"
      
    end
    level = P

  end
  
end

ofp.print '<hr>',"\n"
ofp.print '<p align="right">',"\n"
ofp.print '<font size="2"><strong>Since 2002 by',"\n"
ofp.print '               mita-K. @Geo-SiliconValley-4305</strong></font>',"\n"
ofp.print '</p>',"\n"
ofp.print '</body>',"\n"
ofp.print '</html>',"\n"

基本的に行単位で読みこみ、前の行と現在の行の属性(段落内、箇条書、preタグ の中、等。プログラム中ではlevel変数によって管理している)によってタグを付 けている。例えば、前の行が<p>タグの中(「段落内」属性)で、次の行が 空白行ならば、</p>タグを出力したうえでlevelをBASE(「どのタグの内部に もない」属性)にする、など。

現在の行の属性判断は、行頭の文字によっている。

「・」→箇条書の項目
「◎」→h2の見出し
「◯」→h3の見出し
タブ→pre、あるいは箇条書の内容

のように判断する。

特例として、最初の行だけは何がどうあろうとタイトルと判断され、h1タグによ る見出しとなる。

使い方

使い方は、次のようなプレーンテキストを書くだけである。

ここはタイトル(h1)

◎見出し(h2)

普通の段落は上下一行ずつ空行で区切って書く。

◯見出し(h3)

・箇条書き
	タブで、箇条書きの内容。
・続き
	箇条書を続けるときは、空行を挟まずに書く。

<pre>
preタグで囲んでおくと、一切の変換をしない。ソースコードの掲載等に便利。
</pre>

通常の段落でタブを入れる、つまり

	$ hoge

とかやると、preタグが指定される。

このテキストをtest.preなどとして保存し(拡張子は.preしか受けつ けない)、

$ trans test.pre

などと打てばOKである(ただしその前に上のスクリプトを実行可能にしてパスの 通った場所に置いとかなければ)。

このテキストの整形結果は、こちら。今のとこ ろ、それ以上の機能はない。しかし、これで格段に楽になったのは事実である。


Since 2002 by mita-K. @Geo-SiliconValley-4305