Home

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等の詳細なんかの定義も強調したら完璧でしょうけど。

ついでに、さっき調べた強調のオプション(強調の種類とか大文字小文字を区別するか、とか)と数値の規則を書いておきます。

強調の種類数値
強調101
強調265
強調3129
強調4193
強調5259
強調6323
強調7387
強調8451
行の強調105
行の強調269
行の強調3133
行の強調4197
特に強調103
特に強調267
特に強調3131
特に強調4195

上の表の強調の種類に対応する数値とオプションによって以下のそれぞれの値の合計(論理和といっても 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

via. 制限時間内にHTMLの要素名やCSSのプロパティを思い出すテスト:メモランダム

結果は、HTML 要素が 5 分間に 63 個。 CSS プロパティは 7 分間に 49 個。

続きに自分の忘れていた要素/プロパティの列挙とか感想とか書いてますので、これから挑戦する人は今見ない方がいいです。

Continue reading

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のスクリプトを垂れ流すブログ: ドラッグできる矩形の表示 に掲載されたスクリプトでそのことを知りました。

解決法が分かったので、モジュール変数を使ったスクリプトを書くのを兼ねて、サンプルを作ってみました。

というわけで、前置きが長くなりましたが以下がそのスクリプトです。

Continue reading

MT 4.01 にアップグレードしました

  • 2007年9月21日 20:39

MT を 4.01 にアップグレードしました。何か問題がなければいいけれど。

パックファイル名の検証用スクリプト

  • 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文字以下まで
  • パックファイル名には全角文字が使えない

とりあえず、今調べ上げた時点で結論を出すとしたらこのような感じ。

調べるのに使ったスクリとか、もっと詳しい情報はまた今度。

More...

Home

Search
Feeds

Page Top