Skip to content
kohyama edited this page Apr 15, 2011 · 13 revisions

jsReadLine は文字ベースの対話的なプログラムのWEBページ上への実装をサポートする JavaScript のライブラリです.
Chrome で動作確認しています.
Safari, FireFox, Opera, IE9 は確認していないですが動くようにしたいです.
IE8 ではまったく動きません.

jsReadLine is a library to help implementation of character-based interactive programs on web pages.
Tested on Chrome.
I want it to work on Safari, FireFox, Opera, IE9 but haven't tested yet.
IE8 will not do.

##デモ/Demonstration http://algobit.jp/jsReadLine/

プロンプト prompt> に対して入力を編集して Return キーを押すと, 入力文字列を [] で挟んで出力します.
編集中の行内のカーソルの移動に , , Home, End, Ctrl-f, Ctrl-b, Ctrl-a および Ctrl-e が使えます.
入力履歴を , , Ctrl-p および Ctrl-n で移動できます.
Backspace もしくは Ctrl-h でカーソルの前の文字を削除し, カーソルを一文字前に戻します.
Delete もしくは Ctrl-d でカーソル位置の文字を削除します.
Ctrl-k でカーソル位置より後ろを削除します.

When Return pressed, inputted string after the prompt prompt> will be printed with prefix [ and suffix ] added.
You can use , , Home, End, Ctrl-f, Ctrl-b, Ctrl-a and Ctrl-e to move in a inputting string.
, , Ctrl-p and Ctrl-n move in the inputted history.
Backspace, Ctrl-h deletes a character before the cursor and move the cursor backword by a character.
Delete, Ctrl-d deletes a character on the cursor.
Ctrl-k removes string after cursor.

同じことをするのにあなたが書くべき JavaScript は 7行.
格納するための HTML ファイル全体で 11行です.

To do this, you need to write only 7 lines of JavaScript.
The whole HTML file that contain these written in 11 lines.

<html><head><title>jsReadLine Demo</title>
<script type="text/javascript" src="ReadLine.js"></script>
<script type="text/javascript">
window.onload = function() {
    var rl = new Algobit.ReadLine(80, 24);
    var b = document.getElementsByTagName('body')[0];
    b.appendChild(rl.textarea);
    rl.print("prompt> ");
    rl.gets = function(s) { rl.print("[" + s + "]\nprompt> "); };
}
</script></head><body></body></html>

##ソースコード/Source Code ソースタブの「ダウンロード」からサンプルHTMLを含む全てのファイルをダウンロードするか, ReadLine.js をダウンロードしてください.
予告なく変更します.

Dowload whole files include sample html files, or 'ReadLine.js'.
Codes will be changed without notice.

##ライセンス/Licence 本ソフトウェアは修正BSDライセンスとします.

This software is in the New BSD License.

##使い方/Usage To be written.

##仕様/Specification Algobit.ReadLine クラス仕様.

  • new Algobit.ReadLine(cols, rows) でインスタンス化できる.
    以下 Algobit.ReadLine をインスタンス化したものを本インスタンスとする.
    外部プログラムは本インスタンスの textarea プロパティを DOM階層のどこかに追加することで, コンストラクタで指定された cols と rows を cols, rows とする textarea を表示できる.

  • textarea に対する入力の処理は, このインスタンスが行う.

  • textarea の見た目に関するカスタマイズは, 直接 textarea のプロパティ を外部プログラムや CSS で外部から指定する.

  • 本インスタンスの getc プロパティおよび gets プロパティに 引数を一つとる関数を設定することで, 外部プログラムが, 本インスタン スへの入力を受け取ることができる.
    getc == null && gets == null ならば何もしない.
    getc != null ならば, ショートカットキー以外に入力された一文字を getc に渡す. (未実装: Widnow が処理するショートカットもあるからどうしよう)
    getc == null && gets != null ならば, 改行が入力された時に 最後に改行を入力して以後入力した文字列を gets に渡す.
    編集中の行のどこにカーソルがあっても, 行全体(改行は除く)を渡す.
    ただし, \ でエスケープされた改行を, 改行コードとして文字列に含んで渡す.

  • 本インスタンスの print プロパティは出力関数である.
    文字列一つを引数として print を呼び出すことにより外部プログラムから textarea に出力できる.
    (未実装) Ctrl-L をプリントすると Clear されるなど, vt100 の機能を持つ.
    (未実装) その他, 0x20-0x7e 以外の機能もいろいろ持つ.
    (未実装) 0x07 でベル.

  • プロンプトを出すのは, 外部プログラムの役目である.
    本インスタンスは出力された最後の改行から, 出力の最後までをプロンプトとして認識する.

  • プロパティ history 行分の入力履歴を保存する.

  • プロパティ history は, 明示的に設定されない場合, クラスデフォルト 100 である.

  • f_back, f_forward, f_home, f_end プロパティを関数として呼び出すことにより 最後の出力以後に入力した文字列内をカーソル移動できる.
    それぞれ, 現在のカーソル位置より一つ前, 一つ後, 文字列の先頭, 末尾に移動する.
    これらは, functions プロパティの 'back', 'forward', 'home' および 'end' プロパティの sck プロパティは, [keyCode, ctrl, shift, alt] の形をした配列の配列であり, keyCode は整数値, ctrl, shift, alt は真偽値であり, keyCode キーコードの一致する入力があった場合, ctrl, shift, alt のうち真であるものがあれば, 対応する修飾キーが押されている 場合, 該当機能を呼び出すことができる.
    該当機能とは, プロパティ名の前に 'f_' を不可した関数である.
    初期状態で,
    back: <-, Ctrl-b
    forward: ->, Ctrl-f
    home: Home, Ctrl-a
    end: End, Ctrl-e
    が登録されている.
    例えば, Ctrl-b の入力で f_back() が呼び出される.

  • f_prev, f_next プロパティを関数として呼び出すことにより, 入力履歴を前後して, 現在の入力内容に置き換えることができる.
    {入力履歴 + 新しい入力} 内を移動し, 中身を現在の入力とすることができる.
    移動後は入力内容の末尾にカーソルを移動する.
    新しい入力以外の入力を呼び出して編集した場合, 改行の入力によって入力を確定しないで, さらに移動すると, 編集した内容は失われる.
    新しい入力だけは, 現在の編集状態を保存する.
    f_back ほかと同様, ショートカットキーを設定できる.
    初期状態で
    prev: , Ctrl-p
    next: , Ctrl-n
    が登録されている.

  • f_return を呼び出すと, 入力を確定し入力履歴に現在の入力を追加し, 現在の入力を引数として gets() を(定義されていれば) 呼び出す.
    初期状態でショートカットキー
    return: Return
    が登録されている.

  • f_backspace を呼び出すと, カーソル位置の手前の文字を消し, カーソル位置を一つ前へ移動する.
    (未実装)カーソル位置が 0 の場合や, 後述する \ でエスケープされた改行の直後の場合は, ビジュアルベルかサウンドベルを実行する.
    初期状態でショートカットキー
    backspace: Backspace, Ctrl-h
    が登録されている.

  • f_delete で, カーソル位置が入力の末尾でなければ, カーソル位置の文字を消去する.
    初期状態でショートカットキー
    delete: Delete, Ctrl-d
    が登録されている.

  • 現在の入力内容が表示桁数を超える場合の動作は, textarea の設定による.
    本インスタンスは, 表示桁数に関係なく, JavaScript の実行環境が許す範囲の入力内容を一行として認識できる.

  • (未実装)\ でエスケープすると改行を入力内容に含めることができる.
    その場合, 入力内容に \ は含まれない.

  • 改行の直前ではない \ はリテラルとして扱う.

Sorry thath I've not written an english version of specification.


Copyright © 2010 Yoshinori Kohyama All Rights Reserved.

Clone this wiki locally