Whitespace
Whitespaceとは?
すべてが空白とタブと改行の世界です。
http://ja.wikipedia.org/wiki/Whitespace
サンプルコード
例えばHelloと出力させる場合はこんな感じのコードになります。
はい、わけがわかりません。
textからWhitespaceコードへ
文字を出力する程度なら簡単にできるので、
今回はプレーンテキストファイルをWhitespaceのprint文に変換するという
大変無駄なコードを書いてみました。
言語はRubyです。
#----------------------------- # 出力方法設定 #----------------------------- # コメントの出力 COMMENT_MODE = false # HTTPヘッダーの出力(trueで"Content-type..."をアタマにつける。) HTTP_MODE = true #----------------------------- # 定義部 #----------------------------- WSC_SPACE = ' ' # 0 WSC_TAB = ' ' # 1 WSC_NEWLINE = "\n" # \n ERR_ARGNIL = "arg error." ERR_FILENOTFIND = "file not found." HTTP_HEADER = "Content-type:text/html\n\n"; WS_STACKPUSH = WSC_SPACE + WSC_SPACE WS_STACKPRINT = WSC_TAB + WSC_NEWLINE + WSC_SPACE + WSC_SPACE #----------------------------- # 関数定義 #----------------------------- # メッセージを出力。exitflg=1で終了 def printmsg(str, exitflg) p str exit if(exitflg==1) end # 文字をWhitespace表示にして戻す def conv_wsc(char) Regexp.quote(char) + char[0].to_s(2).split('').inject(WSC_SPACE) do |ret, bit| ret += (bit == "1" ? WSC_TAB : WSC_SPACE) end + WSC_NEWLINE end # 文字列をWhitespace表示にして戻す def conv_wsc_line(line) line.split('').inject("") do |ret, c| ret += "[S" + WS_STACKPUSH + "]" + conv_wsc(c) + "[P" + WS_STACKPRINT + "]" end end #----------------------------- # 引数チェック #----------------------------- readfile = $*[0] whitefile = $*[1] # 入力チェック printmsg(ERR_ARGNIL, 1) if(readfile.nil? || whitefile.nil?) #存在チェック printmsg(ERR_FILENOTFIND, 1) unless(FileTest.file?(readfile)) #----------------------------- # メイン処理 #----------------------------- # 出力結果初期化 outtext = "" # HTTPヘッダー追加 outtext += "HEADER--" + conv_wsc_line(HTTP_HEADER) + "--HEADER" if(HTTP_MODE) # ファイル読み込み f = open(readfile) f.each do |line| outtext += conv_wsc_line(line) end f.close # 終端文字追加 outtext += WSC_NEWLINE + WSC_NEWLINE + WSC_NEWLINE + "EOF" outtext.gsub!(/\S/, "") unless(COMMENT_MODE) # 結果出力 foo = File.open(whitefile,'w') foo.puts outtext foo.close
第1引数で元ファイル、第2引数で出力先を指定すると変換できます。
Web対応?
今回Rubyでこのようなプログラムを書いたのは、
CGIとして出力できないかなぁと思ったのが理由です。
ソースを見てわかるとおり、"Content-type"といったなぞの記述があります。
wspaceから直接出力できるかと思いましたが、
改行が関わってくるので難しい感じです。
苦肉の策で以下のようになりました。
#!/bin/sh
wspace html.ws
一応できました。
問題点
Done. Stack size 0 Heap size 0
と出力されます。どうしよ。。。