« なんとか出来ないかな?<JavaScriptでヒアドキュメント | トップページ | やっぱり温泉はいいなぁ »

2007/02/17

JavaScript用ヒアドキュメントライブラリを試作

ちょっと工夫して、下のようなヒアドキュメント・ライブラリを作ってみました。
一応、Windows XP 上の IE6 SP2、Firefox 2.0.0.1、Opera 9.10 でサンプルは動作するようです。
外部スクリプトの形でhttp://furyu.tea-nifty.com/script/heredocument.jsに置いてあります。
var hdocLists = new Array() ;

function    hdocInit( tgt ) {
    if ( !tgt ) tgt = location.href ;
    for (;;) {
        var xmlHttpObj = null ;
        if ( typeof ActiveXObject != "undefined" ) {
            var msXml = [ 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP' ] ;
            for ( var ci=0; ci < msXml.length; ci++ ) {
                xmlHttpObj = new ActiveXObject( msXml[ci] ) ;
                if ( xmlHttpObj ) break ;
            }
        }
        else if ( typeof XMLHttpRequest != "undefined" ) {
            xmlHttpObj = new XMLHttpRequest() ;
        }
        if ( !xmlHttpObj ) break ;
        xmlHttpObj.open( 'GET', tgt, false ) ;
        xmlHttpObj.send( null ) ;
        
        var hdocTgtLines = xmlHttpObj.responseText.split(/\r?\n/) ;
        var keyflg = false ;
        var lines = new Array() ;
        var key = '' ;
        for ( var ci=0; ci < hdocTgtLines.length; ci++ ) {
            var line = hdocTgtLines[ci] ;
            if ( line.match( /^<<(.+)$/ ) ) {
                key = RegExp.$1 ;
                keyflg = true ;
                lines = new Array() ;
            }
            else if ( keyflg ) {
                if ( line.match( new RegExp("^"+key+"$" ) ) ) {
                    keyflg = false ;
                    hdocLists[key] = lines.join('\n') ;
                    continue ;
                }
                lines.push(line) ;
            }
        }
        break ;
    }
    
}   // end of hdocInit()

function    hdocGet( key ) {
    return hdocLists[key] ;
}   // end of hdocGet()
使い方は、
  1. 最初にhdocInit()で初期化。
    デフォルトの対象文書はlocation.hrefですが、同一ドメイン内なら引数にURLを指定することで別文書を指定することも出来る……かもしれません。
  2. 例えば変数に代入する場合は、
    var str = hdocGet('hdoc1'
    /*
    <<hdoc1
     :
     :
    【ここに文字列を入れます】
     :
     :
    hdoc1
    */
    ) ;
    シンボル(hdoc1の箇所)は任意です。ただし全文書中でユニークなものであること、最初の"<<(シンボル)"と最後の"(シンボル)"は必ず行頭に記述すること(同一行には他に何も書かない)が条件となります。
コメント(/*~*/)を利用しているので、利用する際には文字列中に含まれる'/*' や'*/'の'/'を'&#x2f;'に置換える必要があるとか、いろいろと制限がありますが、まぁ大目に見てください。
ちなみにscript要素内以外に記述した"<<(シンボル)"~"(シンボル)"も対象となってしまうので注意。
要はhdocInit()時に、対象文書中の"<<(シンボル)"~"(シンボル)"を探して、その中の文字列をシンボルをキーにしてhashに突っ込んでいるわけです。
正規表現が苦手なので、細かいチェックはしてませんし、書き方もベタベタです(苦笑)。

« なんとか出来ないかな?<JavaScriptでヒアドキュメント | トップページ | やっぱり温泉はいいなぁ »

パソコン・インターネット」カテゴリの記事

おもいつき」カテゴリの記事

覚書」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: JavaScript用ヒアドキュメントライブラリを試作:

» JavaScriptでHTMLを出力するときの小技(ヘッダメニューの続き) [ガジェットWatch]
以前の記事で、ココログのヘッダ部分にメニューを設置した話を書きました。メニュー作成のHTMLを全部JavaScriptで記述し、外部ファイルに追い出してしまうことで、内容が変わっても「ブログへの反映... [続きを読む]

« なんとか出来ないかな?<JavaScriptでヒアドキュメント | トップページ | やっぱり温泉はいいなぁ »

戻るリンク追加

カレンダー

2019年9月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

ココログカレンダーPlus

検索


    • Web全体 サイト内
    • 蔵書のISBNを入力して下さい
    • はじめる前
      初級者向け
      上級者向け
      ブログ紹介
      結果を表示

最近のトラックバック

コメントリストツリー化

無料ブログはココログ