❌vscode-scb検討1
まとめ
vscode拡張機能開発のSyntaxを思い出した(tritask時代と変化なし)
やりたいことは、^( )+に色をつけたい
code:scb
lv0
lv1
lv2
lv3
...
が、普通に書くと上手くいかん
秀丸エディタみたいにこれで上手くいってほしいんだけどさ
https://gyazo.com/ffc355ec6f490c357ad0002eff508e40
VSCodeでこれやると、indent1の^( )しか働かなくなる
とりあえず次の文字もキャプチャすることで対処できたのだが
code:json
"indent1": {
"patterns": [{
"captures" : {
"1" : {
"name" : "indent.1.scb"
},
"2" : {
"name" : "nohilight.scb"
}
}
}]
},
code:これだとスペースの後に続ける系の記法が全部上手くいかない.scb
たとえば
引用とか
code:コードブロックとか
aaa
aaa
:c
-.icon
検討1
試行錯誤はこれで
2022/06/27 syntaxつくってるんだけどハイライトされてくれない
何か設定足りないっけ……?sta.icon*2
やった、リンクはついた
https://gyazo.com/fe9ac4e75b100c6003df91373dbe6e9e
インデントがつかないのなんで?
underlineにしてるんだけど、spaceには効かないのか?
true。マジかよーsta.icon*3
https://gyazo.com/26552f033c60235eaaf744c0c94456d2
https://gyazo.com/59f9ac0930b7e7f1e571a39d42e4cd4a
↑ こんなふうにインデント部分の右側もつくようにしたらついた
インデント部分だけハイライトつけたいのだが、つかないのか……
いや、これができてるからできるやろsta.icon
え、嘘でしょ、syntaxじゃなくて普通にextension.tsで頑張ってる感じなのか
apiのdecoration
でもそうだよなぁ、色つけられるならこんなことしてないわけでsta.icon
テーマ部分の書き方
textMateRulesのリファレンスが見当たらん
foreground, background and font style
で、スタイルは(bold, italic and underlineの3つらしい
でもvscodeはbackgroundないねん
https://gyazo.com/45e0c24e19ce2d60b6220eef99b0281f
2016年のissueで、21 days agoとかにまだコメントがある
はよサポートしてくれーsta.icon
vscodeのソース漁る
foregroundとfontstyleしかないかーsta.icon
全部指定したけどダメだった
code:json
{
"name": "indent1",
"scope": [
"indent.1.scb"
],
"settings": {
"foreground": "#EA9198",
"fontStyle" : "underline bold italic strikethrough"
}
},
\(^o^)/sta.icon*3
---
わかった、ええやろ、じゃあ行まるごと色つけてやるよ
あー、早速詰まる
https://gyazo.com/2d5ad23c19d49a6d63f0e61880a5965f
^( )のindent1が一番優先度強くなる問題
定義順関係なし
https://gyazo.com/58f1b4887df8c6a3cb1ff03ce35958fa
えー、秀丸エディタはちゃんと解決できるんだけどな
https://gyazo.com/ffc355ec6f490c357ad0002eff508e40
こういうところだよなぁ。秀丸エディタはやっぱり強いんだよ……sta.icon*4
よし、indentの優先順位はクリア
https://gyazo.com/e329f5cb12d9d084d268f898b0239c7b
code:スペースn個の直後に「スペース以外の1文字」をかませる.json
"repository": {
"indent1": {
"patterns": [{
"name": "indent.1.scb",
}]
},
"indent2": {
"patterns": [{
"name": "indent.2.scb",
}]
},
...
リンクこれどうすればええんや
定義順は関係なさそ
code:リンクこれだが.json
"link": {
"patterns": [{
"name": "link.scb",
"match": "\\^\\+\\]"
}]
}
だよなー、やっぱり行全体にマッチさせたら詰むって\(^o^)/sta.icon*3
--
いやまて、render whitespace
https://gyazo.com/1ee3eefebfdbf709fc50ae793eaa3a2b
https://gyazo.com/24f4d653fafd20ef67217705b7c98768
none, selection, trailingのときは上記(striketorough)が見えてる
underlineもできたsta.icon*2
が、やっぱり優先度問題が出てくる
https://gyazo.com/70e8f871aa03c516ec50fe4447a6202e
これどうやって回避すればええんや?
かといって[^ ]で〆ないと全部indent1のピンクがついちゃうし……
あとは正規表現の書き方の問題
いけそうな気はすると思う
あるいは(これはvscode-tritaskの例だが)capture工夫して別のnameを指させるとか
https://gyazo.com/abca30e7c0e02ee6ddef99057613498a
indent1
indent2は「indent1の範囲をキャプチャする」
indent3は「indent2の範囲をキャプチャする」
まあこれだとindent2の行にindent1の色ついちゃうけど。
重ねればいいのか?
この辺の試行錯誤せねばね
---
code:scb
indent0
indent1
indent2
これだとindent1が先にヒットしてindent2以上がヒットしない
^( ) indent1
^( ) indent2
これも同じでindent1が優先されてしまう、あと行全部がハイライトされちゃう
^( )[^ ].* indent1
^( )[^ ].* indent2
これはちゃんと補足されるけど、先頭文字を巻き込んでしまう
^( )[^ ] indent1
^( )[^ ] indent2
https://gyazo.com/c83c6a6d69eb0ea6fbb2c732640cc224
先頭のリンク(など他の文法)も殺されてしまう
vscodeではこういうときのためにキャプチャでパーツ化する
https://gyazo.com/c444fa2aa4eddd111e0bc4403e38002d
2022/06/28 Wedを2022/06/28とWedに分けてキャプチャ
前者に1nameを割当てて、後者は既存のname(起こり得るもの)を当ててる
https://gyazo.com/06620a3ff78781b72c983d4bf54ba3fc
06:49 06:55を2つに分けてる
別のnameを当てている
(nameごとに色を当てるのでこれにより別の色を設定できるようになる)
ヒントはこんなもんsta.icon
---
indent2
^( )( )
\1はindent1
\2がindent2
indent3
これどうなるんだ?
^( )( )
\1はindent2
\2がindent3
こうか?sta.icon
ダメですねぇsta.icon
code:json
"indent2": {
"patterns": [{
"match": "^( )( )",
"captures" : {
"1" : {
"name" : "indent.1.scb"
},
"2" : {
"name" : "indent.2.scb"
}
}
}]
},
https://gyazo.com/0b13e3dd3acc46e3bb6e9914c6cd4f97
1しか効いてない
indent1消したらいけた!?
code:これを消す.json
"indent1": {
"patterns": [{
"name": "indent.1.scb",
"match": "^( )"
}]
},
https://gyazo.com/a3488c5346ed24c5ab88c6c6fc5901f6
が、そうするとindent1の行がハイライトされない
わかった、ダミーのnameを与えればイインダ?sta.icon
うぇーい、俺の勝ち
https://gyazo.com/1971eac5512368fc62a4a6dd55567ac2
code:json
"repository": {
"indent1": {
"patterns": [{
"captures" : {
"1" : {
"name" : "indent.1.scb"
},
"2" : {
"name" : "nohilight.scb"
}
}
}]
},
"indent2": {
"patterns": [{
"captures" : {
"1" : {
"name" : "indent.2.scb"
},
"2" : {
"name" : "nohilight.scb"
}
}
}]
},
表現はunderlineとstrikethroughのどっちがいい?
strikethrough
https://gyazo.com/471d009f0a0c7871fa7bd8f6c7949868
underline
https://gyazo.com/1971eac5512368fc62a4a6dd55567ac2
真ん中の方がわかりやすいよね?
strikethroughでsta.icon
https://gyazo.com/3de359383ea381b9e56a7056bfafcd76