HSP3.1から同梱されなくなったHTMLヘルプを作成するスクリプト。
命令一覧は作成しません。
祝・50投稿ヽ(´▽`)ノよくよく考えたらHHXのDBにはABC順に記録されているので、配列を使う必要は全くありませんでした。
もしEXE化する機会があれば処理方法を再度考え直してみたいと思います。
改良版をこちらのページから入手できます。
関連:HSファイルからHTMLヘルプを作成する(2)// hsファイルからHTMLヘルプを作成
#include "../hsphelp/src/hhx_db.hsp"
#module
// 関数名・命令名からidを得る
#defcfunc get_id str name, local s
s = name
if ( peek( s, 0 ) < 'a' ) | ( 'z' < peek( s, 0 ) ) : s = strmid( s, 1, strlen( s ) - 1 )
return "s_" + s
// 関数名・命令名からファイルの通し番号(独自に定義)を得る
// help_a.htmlを0、help_b.htmを1、…help_sp.htmを26とする
#defcfunc get_filenum str name, local s, local p
s = name
p = peek( s, 0 )
if ( 'A' <= p ) & ( p <= 'Z' ) : p -= 'A' - 'a'
if ( 'a' <= p ) & ( p <= 'z' ) {
return p - 'a'
} else {
return 'z' - 'a' + 1
}
// 通し番号からファイル名を得る
#defcfunc get_filename int num
if ( 0 <= num ) & ( num <= 'z' - 'a' ) {
return "help_" + strf( "%c", num + 'a' ) + ".htm"
} else {
return "help_sp.htm"
}
#global
chdir dir_exe + "/hsphelp"
gosub *load_db // HHXのDBからデータをロードする
gosub *init // 前準備
gosub *make_html_files // HTMLファイルを作成する
gosub *make_css_file // CSSファイルを作成する
dialog "finish"
end
*load_db
HHX_init_load_db
if HHX_currentset_sum() ! HHX_diskset_sum() {
mes "rebuilding db..." // HSファイルに何かしらの変更が加わったため、DBを再構築
HHX_init_rebuild_db DBR_WRITEDB
} else {
HHX_init_extract_db
}
return
*init
// a ~ zと特殊文字(_, #)用のファイルを用意
sdim file, 1024, 'z' - 'a' + 2
dim file_offset, 'z' - 'a' + 2
// HTMLのヘッダをそれぞれのファイルに書き込む
buf = {"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"ja\" lang=\"ja\">
<head>
\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\" />
\t<meta http-equiv=\"Content-Language\" content=\"ja\" />
\t<link rel=\"stylesheet\" type=\"text/css\" href=\"hsphelp.css\" />
\t<title>HSP command help</title>
</head>
<body>
\t<h1>HSP command help</h1>\n"}
l = strlen( buf )
repeat 'z' - 'a' + 2
file( cnt ) = buf
file_offset( cnt ) = l
loop
return
*make_html_files
db_num = HHX_select_all() // すべての命令・関数を検索対象とする
repeat db_num
c = HHX_get_next()
db_name = hhxdata( c, C_NAME ) // 命令・関数名
file_num = get_filenum( db_name ) // この命令が記録されるHTMLの通し番号(独自に定義したもの)
// 見出し(h2タグ)
buf = "\t<h2 id=\"" + get_id( db_name ) + "\" class=\"keyword_name\">" + db_name + " " + hhxdata( c, C_PRM ) + "\t\t[" + hhxdata( c, C_SUMMARY ) + "]</h2>\n"
// パラメータ
if hhxdata( c, C_PRM2 ) != "" {
buf += "\t\t<p class=\"prm\">" + hhxdata( c, C_PRM2 ) + "</p>\n"
}
// 説明文
if hhxdata( c, C_INST ) != "" {
buf += "\t\t<h3>説明</h3><p class=\"inst\">" + hhxdata( c, C_INST ) + "</p>\n"
}
// 備考
if hhxdata( c, C_NOTE ) != "" {
buf += "\t\t<h3>備考</h3><p class=\"note\">" + hhxdata( c, C_NOTE ) + "</p>\n"
}
// 参照
if hhxdata( c, C_HREF ) != "" {
buf += "\t\t<h3>参照</h3><ul class=\"href\">"
i = 0 : l = strlen( hhxdata( c, C_HREF ) )
repeat
getstr s, hhxdata( c, C_HREF ), i, ' '
i += strsize
buf += "\t\t\t<li><a href=\"" + get_filename( get_filenum( s ) ) + "#" + get_id( s ) + "\">" + s + "</a></li>\n"
if l <= i : break
loop
buf += "\t\t</ul>"
}
// 水平線(次の項目との区切り)
buf += "\n\t<hr>\n\n"
// 配列に保存
l = strlen( buf )
file( file_num ) += buf
file_offset( file_num ) += l
; title str( 100 * double( cnt ) / db_num ) + "% finished..."
; await 1
loop
// ファイルをディスクに保存
repeat 'z' - 'a' + 2
file( cnt ) += "</body></html>"
file_offset( cnt ) += strlen( "</body></html>" )
bsave get_filename( cnt ), file( cnt ), file_offset( cnt )
loop
return
*make_css_file
buf = {"body {
background-color : #f0e0d0 ;
}
h2 {
color : #000080 ;
font-size : large ;
font-weight : bold ;
white-space : pre ;
}
h3 {
font-weight : bold ;
}
p.prm {
color : #000080 ;
font-size : small ;
white-space : pre ;
margin-left : 70px;
}
p.inst {
margin-left : 70px;
white-space : pre ;
}
p.note {
margin-left : 70px;
}
ul.href {
margin-left : 70px;
}"}
bsave "hsphelp.css", buf, strlen( buf )
return
2007年8月4日土曜日
HSファイルからHTMLヘルプを作成する
ラベル:
HHXモジュールの利用,
HSP,
HTML出力,
文字列操作・解析
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿