Fuji Diablog
hilight ファイルの hilight ファイル
- 2007年10月10日 20:50
なんのこっちゃって感じですが、秀丸エディタ強調表示定義ファイル(以下 hilight ファイル)を秀丸エディタで開いて編集するための hilight ファイルです。
17,^0*(1|9|17|25|33|41|49|57),.* 81,^0*(65|73|81|89|97|105|113|121),.* 145,^0*(129|137|145|153|161|169|177|185),.* 209,^0*(193|201|209|217|225|233|241|249),.* 275,^0*(259|267|275|283|291|299|307|315),.* 339,^0*(323|331|339|347|355|363|371|379),.* 403,^0*(387|395|403|411|419|427|435|443),.* 467,^0*(451|459|467|475|483|491|499|507),.* 21,^0*(5|13|21|29|37|45|53|61),.* 85,^0*(69|77|85|93|101|109|117|125),.* 149,^0*(133|141|149|157|165|173|181|189),.* 213,^0*(197|205|213|221|229|237|245|253),.* 19,^0*(3|11|19|27|35|43|51|59),.* 83,^0*(67|75|83|91|99|107|115|123),.* 147,^0*(131|139|147|155|163|171|179|187),.* 211,^0*(195|203|211|219|227|235|243|251),.*
それぞれの強調に対応した強調の種類でハイライトします。あとは、コメント(//~行末)の強調とか、カラー・複数行の強調・ツリー定義・#ifdef等の詳細なんかの定義も強調したら完璧でしょうけど。
ついでに、さっき調べた強調のオプション(強調の種類とか大文字小文字を区別するか、とか)と数値の規則を書いておきます。
強調の種類 | 数値 |
---|---|
強調1 | 01 |
強調2 | 65 |
強調3 | 129 |
強調4 | 193 |
強調5 | 259 |
強調6 | 323 |
強調7 | 387 |
強調8 | 451 |
行の強調1 | 05 |
行の強調2 | 69 |
行の強調3 | 133 |
行の強調4 | 197 |
特に強調1 | 03 |
特に強調2 | 67 |
特に強調3 | 131 |
特に強調4 | 195 |
上の表の強調の種類に対応する数値とオプションによって以下のそれぞれの値の合計(論理和といっても OK )になります。
オプション | 足す値 |
---|---|
大文字/小文字の区別が OFF | +8 |
単語の検索が ON | +32 |
正規表現が ON | +16 |
例を出すと「強調1」で「大文字/小文字の区別がOFF」で「単語の検索がON」で「正規表現がOFF」の場合は 01 + 8 + 32 で 41 となります。( 16 進数の方が分かりやすいのですが、指定は 10 進数でしなくてはならないので...)
しかしこれ...、全通りを列挙しているという原始的な方法なので、設定が 1 つ増えただけで、列挙する数は 2 倍になってしまいますね...。
ていうか、 hilght ファイルの仕様はどこかに書いていないのかしら。他の人の hilght ファイル見て初めて中にコメントが書けることを知ったのだけれど。
あ、もちろん、上の hilght ファイルは手作業で書いたわけではなく。 HSP で自動的に作成しました。
a. 0 = 0x001, 0x041, 0x081, 0x0c1
a. 4 = 0x103, 0x143, 0x183, 0x1c3
a. 8 = 0x005, 0x045, 0x085, 0x0c5
a.12 = 0x003, 0x043, 0x083, 0x0c3
buf = ""
repeat 16
i = cnt
buf += "" + ( a.i + 0x010 ) + ",^0*("
repeat 8
j = cnt
v = a.i
if j & 1 : v += 0x008
if j & 2 : v += 0x010
if j & 4 : v += 0x020
buf += "" + v
if cnt < 7 : buf += "|"
loop
buf += "),.*\n"
loop
mesbox buf, 640, 480
rnd と randomize を HSPDA のメルセンヌツイスタの命令に置き換える
- 2007年10月 9日 18:46
#include "hspda.as"
#undef randomize
#define global randomize( %1 = -1 ) rndf_ini@ %1
#undef rnd
#module
#defcfunc rnd int x, local r
rndf_geti@ r, x
return r
#global
Googlebot に教えてもらった、リンクがおかしくなっているところ
- 2007年10月 5日 00:21
検索結果のページで、各エントリーの見出しのリンクの href
属性の終端のダブルクォートが欠けていたためにおかしくなっていたのを修正。 MT のテンプレート編集画面にて Opera で変なことになる不具合が原因。教えてくれた Googlebot に感謝。
mt.Vicuna2.0b1 入れました
- 2007年9月30日 20:56
Template Installer Plugin をアップロードしたらなぜか Script Error になり...手作業で一つずつ入れました。骨が折れました。
WordPress に以降するまでのつなぎですから、細かいところをいじったりはしません。
思い出せた HTML 要素 63個、思い出せた CSS プロパティ 49 個
- 2007年9月26日 23:05
- How Many HTML Elements Can You Name in 5 Minutes?
- How Many CSS Properties Can You Name in 7 Minutes?
via. 制限時間内にHTMLの要素名やCSSのプロパティを思い出すテスト:メモランダム。
結果は、HTML 要素が 5 分間に 63 個。 CSS プロパティは 7 分間に 49 個。
続きに自分の忘れていた要素/プロパティの列挙とか感想とか書いてますので、これから挑戦する人は今見ない方がいいです。
grotateのガタガタを逆に利用できないか改
- 2007年9月26日 13:23
grotate のガタガタを逆に利用できないか試してみるの記事では微妙な結果に終わってしまったものの。今度は、カーソルキーで拡大率と角度を変更できるようにしてみたり。あと、ソースもデバッグ用のコードが残っていたりとかしてたので。
#include "hspmath.as"
#const WINDOW_ID_MAIN 0
#const WINDOW_ID_PICTURE 1
#const WINDOW_ID_WORK 2
#module
#deffunc getGrotateSize int copyWidth, int copyHeight, double rotate, double scale, \
var sizeX, var sizeY, \
local sinRotate, local cosRotate, local x, local y, local xx, \
local minX, local minY, local maxX, local maxY
sinRotate = sin( rotate )
cosRotate = cos( rotate )
repeat 4
x = double( copyWidth ) / 2
if ( ( cnt + 1 ) \ 4 ) <= 1 {
x *= -1
}
y = double( copyHeight ) / 2
if cnt <= 1 {
y *= -1
}
x *= scale
y *= scale
xx = cosRotate * x - sinRotate * y
y = sinRotate * x + cosRotate * y
x = xx
if ( cnt == 0 ) || ( minX > x ) {
minX = x
}
if ( cnt == 0 ) || ( minY > y ) {
minY = y
}
if ( cnt == 0 ) || ( maxX < x ) {
maxX = x
}
if ( cnt == 0 ) || ( maxY < y ) {
maxY = y
}
loop
sizeX = maxX - minX + 1
sizeY = maxY - minY + 1
return
#global
// バッファに画像読み込み
buffer WINDOW_ID_PICTURE
picload dir_exe + "\\sample\\demo\\jp6girl.bmp"
copyWidth = ginfo_winx
copyHeight = ginfo_winy
rotate = 0.0 // 角度
scale = 1.0 // 拡大率
screen WINDOW_ID_MAIN, copyWidth, copyHeight
onkey gosub *labelOnKey
gosub *draw
stop
*draw
getGrotateSize copyWidth, copyHeight, rotate, scale, workWidth, workHeight
buffer WINDOW_ID_WORK, workWidth, workHeight
pos workWidth / 2, workHeight / 2
gmode GMODE_GDI, copyWidth, copyHeight
grotate WINDOW_ID_PICTURE, 0, 0, rotate, scale * copyWidth, scale * copyHeight
gsel WINDOW_ID_MAIN
redraw 0
pos copyWidth / 2, copyHeight / 2
gmode GMODE_GDI, workWidth, workHeight
grotate WINDOW_ID_WORK, 0, 0, -rotate, workWidth / scale, workHeight / scale
redraw 1
title strf( "角度:%.2f", rotate ) + " " + strf( "拡大率:%.2f", scale )
return
*labelOnKey
switch wParam
case 37 // カーソルキー[←]
rotate -= M_PI / 180
if rotate < ( -M_PI ) : rotate += M_PI * 2
gosub *draw
swbreak
case 39 // カーソルキー[→]
rotate += M_PI / 180
if rotate > ( M_PI ) : rotate -= M_PI * 2
gosub *draw
swbreak
case 38 // カーソルキー[↑]
scale *= 1.1
scale = limitf( scale, 0.01, 10.0 )
gosub *draw
swbreak
case 40 // カーソルキー[↓]
scale /= 1.1
scale = limitf( scale, 0.01, 10.0 )
gosub *draw
swbreak
swend
return
拡大率をあげると重くなるので注意!
マウスでクリックするタイプのボタンのサンプル
- 2007年9月25日 14:50
Windows のコントロールを使わず、自分で描画する「マウスでクリックするタイプのボタン」のサンプルです。
これ、 Windows コントロールのボタンと同じような挙動をさせようと思ったら案外ややこしくなるんです。ボタンをクリックし始めたかと思うと、そのままドラッグするような動作をした場合...とか。
このスクリプトの特徴は以下の通り。
- モジュール変数を使っている
- メインループではなく、
oncmd
を使ったイベントドリブン形式 - 描画が必要なとき(画面が変更されているであろうとき)にしか描画を行いません。
以前似たような機能をランチャーテンプレで作ったのですが、それにはちょっとした問題がありました。
まず、ボタンにホバーしたままマウスをウィンドウからはみ出させるとホバー状態が保たれたままになってしまう問題です。
これはマウスが動いたことを知らせるメッセージ WM_MOUSEMOVE
が、マウスがウィンドウ内でないと送られてこないからでした。しかし、ウィンドウからはみ出たことをメッセージで取得する方法が 2ch に書き込まれていてそこで知りました。
- 371 :名前は開発中のものです。:2007/08/01(水) 23:40:12 ID:6YU1zlws
>>370
TrackMouseEvent WM_MOUSELEAVE 辺りをググればおk#uselib "user32.dll" #func TrackMouseEvent "TrackMouseEvent" int dim tme,4 tme(0) = 16 tme(1) = 2 tme(2) = hwnd tme(3) = 0 oncmd gosub *SUB_WM_MOUSEMOVE,0x200 oncmd gosub *SUB_WM_MOUSELEAVE,0x02A3 stop *SUB_WM_MOUSEMOVE TrackMouseEvent varptr(tme) redraw 0:color 255,255,255:boxf:color:pos 320,240:line mousex,mousey:redraw 1 return *SUB_WM_MOUSELEAVE redraw 0:color 255,255,255:boxf:color:pos 320,240:mes "外に出たよ":redraw 1 return
ゲーム製作技術@2ch掲示板 HSP - Hot Soup Processor [15]より引用。マークアップは作者( fujidig )による。
もう一つの不具合は、カーソルを変更しても実際に変更されるのは「次にマウスが動いたとき」と一テンポ遅れることです。これは原因はよく分かりませんでしたが、カーソルを変更直後に mouse
命令を使えば解決できます。HSP3のスクリプトを垂れ流すブログ: ドラッグできる矩形の表示 に掲載されたスクリプトでそのことを知りました。
解決法が分かったので、モジュール変数を使ったスクリプトを書くのを兼ねて、サンプルを作ってみました。
というわけで、前置きが長くなりましたが以下がそのスクリプトです。
パックファイル名の検証用スクリプト
- 2007年9月18日 19:55
// どんなパックファイル名が無効かを検証するスクリプト
// パック用ファイルの作成から生成したスクリプトの実行まで自動的に行います
#include "hspcmp.as"
#define SCRIPT_FILE_NAME "main.hsp"
#define EXE_FILE_NAME "packtest.exe"
#define OBJECT_FILE_NAME "start.ax"
#define PACKFILE_FILE_NAME "packfile"
// チェックするファイル名の配列
fileNames = "123456789012345", "1234567890123456"
// パック用ファイルの作成
notesel _
foreach fileNames
notesave fileNames( cnt )
loop
// スクリプトを生成して保存
sdim script, 4096
script += "#packopt name \"" + EXE_FILE_NAME + "\"\n"
foreach fileNames
script += "#pack \"" + fileNames( cnt ) + "\"\n"
loop
script += "title \"result ->\"\n"
script += "buf = \"\"\n"
foreach fileNames
script += "exist \"" + fileNames( cnt ) + "\":"
script += "if strsize == -1 :"
script += "buf += \"" + fileNames( cnt ) + " is not found. \\n\""
script += ": else :"
script += "buf += \"" + fileNames( cnt ) + " is found. \\n\""
script += "\n"
loop
script += "mesbox buf, ginfo_winx, ginfo_winy\n"
notesel script
notesave SCRIPT_FILE_NAME
// スクリプトの表示
title "code ->"
mesbox script, ginfo_winx, ginfo_winy
// スクリプトから実行ファイルの作成
hsc_ini SCRIPT_FILE_NAME
hsc_objname OBJECT_FILE_NAME
hsc_comp , 4 // make packfile and object file
gosub *error
hsc3_make dir_exe + "\\runtime" // hsp runtime path
gosub *error
gosub *clean
// 実行ファイルの実行
exec EXE_FILE_NAME
stop
*error
if stat == 0 : return
hsc3_messize errorBufSize
sdim errorBuf, errorBufSize+1
hsc_getmes errorBuf
dialog errorBuf
gosub *clean
end
*clean
hsc_bye
// スクリプトとパック用ファイルを削除
exist SCRIPT_FILE_NAME : if strsize != -1 : delete SCRIPT_FILE_NAME
exist OBJECT_FILE_NAME : if strsize != -1 : delete OBJECT_FILE_NAME
exist PACKFILE_FILE_NAME : if strsize != -1 : delete PACKFILE_FILE_NAME
foreach fileNames
exist fileNames( cnt ) : if strsize != -1 : delete fileNames( cnt )
loop
return
このスクリプト一つで、パック用ファイルの生成から生成したスクリプトの実行まで行います。 fileNames に色々なファイル名を代入してみて、どんなファイル名が有効でどんなファイル名が無効か分かります(実行結果が found なら有効、 not found なら無効)
パックファイル名は15文字以下で全角不可、が現時点で出した場合の結論
- 2007年9月18日 13:10
- パックファイル名の文字数は15文字以下まで
- パックファイル名には全角文字が使えない
とりあえず、今調べ上げた時点で結論を出すとしたらこのような感じ。
調べるのに使ったスクリとか、もっと詳しい情報はまた今度。