======== pair.def ペア括弧 ======== by y.mikome ■ymfcst.def用カスタマイズ ---------------------------------------------------------- #DATA - ; pair.$$$の作成箇所 -:tmp +:vzdef ---------------------------------------------------------- v0.01 ・初版 v1.00 ・学習結果をtmpディレクトリのpair.$$$に出力保存 ○使用変数 k 括弧定義文字列のアドレス b..0 前回確定した括弧のアドレス p 文字列中のptr. q 次候補のptr. c 汎用変数 m 現在のck n 次候補のck a 前括弧 f フラグ * M マクロ 1 ^] "ペア括弧" ?. (mr==$80)?. &06 (k.(-2))? >A ; k=括弧文字列 ; データファイルから情報を取得 &Sc(pr,pq)&Sy(pr)bx.0-, ;#DATA- ; &Sc(pr,pi) ;#DATA+ &Sa(pr,"pair.$$$$$$") ax=$3D00,dx=pr,&i($21) bx=ax,(r)??{ ax=$3F00,cx=128,dx=k,&i($21) ax=$3E00,&i($21) ; &Sn(k) &m("%x",k.(r-3))(k.(r-3)==$1A)? k.(r-3)-, } k.(-2)+, ; ロードフラグ :A &05 q=b..0, ; q=前回確定した括弧のアドレス (f= cm!=58)? ; 連続押しでないなら &03 ; 前回確定括弧を文字列の先頭へ &SF(k,cd) (r==0||mb)? >02 ; カーソル位置に括弧がなければ新規挿入 p=r, ; p=カーソル位置括弧のアドレス m=ck, ; m=カーソル位置括弧のck (s)?? &s ;--- 前括弧へ移動 --- &f(cd,k) (r%2)?{ ; if 後ろ括弧 (m)?{ p-=2, c=p..0,c!!, } ?{ p--, c=p.0, } ; p= 前括弧 j=cd, i-, :B #s (r&&s==0)? >D (cd==j)? i++, ; 前括弧へ (cd-c)? >B (i)?{ i--, >B } } ; endif ;--- 括弧のシフト --- (f)? q=k, ?{ ;f+ なら次候補は常に先頭括弧 (m)? q=p+4, ? q=p+2, (q.0)?? q=k, ; q= 次候補括弧ptr. } &Jk(q.0) (n=r)?{ c=q..0,c!!, }? c=q.0, ; n= 次候補のck mi[+, j=cd, i-, &o(c) #s ; 前括弧を置換 (m)?{ c=p..1,c!!, }? c=p.1, :C #d (r&&s==0)?{ mi], >D } ; 後ろ括弧へ (cd==j)? i++, (cd-c)? >C (i)?{ i--, >C } (n)?{ c=q..1,c!!, }? c=q.1, &o(c) #s mi], ; &m("%s%s",q,k) &Sc(pr,q,64) (r-pr<64)? &Sc(r,k,pr+64-r) &m(pr) &d #? &05 b..0=q, cm=58,. :D &m(26) ; 「括弧が見つかりません」 ;--- 新規括弧 --- 2: (mb&&xc<1)? #B ; ブロック末尾へ &Jk(k.0) x=r, ; 全角括弧 x=1 mi[-, (x)? r=k..1,r!!, ? r=k.1, &o(r) ; 後括弧 (mb)? #B ? #s (x)? r=k..0,r!!, ? r=k.0, &o(r) ; 前括弧 mi], (mb)? #B mb-, #? &m("%s",k) b..0-, cm=58, ;--- 前回選択括弧をバッファの先頭へ --- 3: (q==0 || q==k)?. &Jk(q.0) c=r*2+2, ;&t &Sm(pu,q,c) ;&m("%s",pu) &Sm(k+c,k,q-k) ;&m("%s",k) &Sm(k,pu,c) ;&m("%s",k) b..0-, ; 結果をデータファイルに書き出す。 &Sc(pr,pq)&Sy(pr)bx.0-, ;#DATA- ; &Sc(pr,pi) ;#DATA+ &Sa(pr,"pair.$$$$$$") ax=$3C00,cx-,dx=pr,&i($21) bx=ax,(r)??{ &Sn(k) cx=r, ax=$4000, dx=k,&i($21) ax=$3E00, &i($21) } 5: b3+$,."$[2]" 6: k5+$,. "" #if 98 "《》【】{}『』「」▲▼()〔〕[]〈〉△▽“”‘’$ 「」[](){}<>陪膚昧螺刎嚀寔怕插≧着F套A" #else "《》【】{}『』「」▲▼()〔〕[]〈〉△▽“”‘’「」[](){}<>" #endif .. ; ←ゴミではありません(^_^;) * ==== End of kakko.def ========