vscode-scbでページ名変更
1
これや。めっちゃほしいsta.icon*3
が、ファイル全部見て回ってリンク修正が必要だから結構しんどい……
ページ名変更に必要な処理
rename current scb file
enum all *.scb filenames
replace the link pattern
ここが鬼門sta.icon*3
正規表現とかで上手いことリンクの文字列だけ取り出す必要がある
無理じゃない?
コードブロックみたいに行またいでるのは検出しようがないだろsta.icon*2
単純な置換では無理だし
[aaa]を置き換えたい場合、コードブロックに書いてる[aaa]は置き換えちゃいけない ← これが必要
replace('[aaa]', )みたいなことすると当然無理だよね。というか字面の世界だけでは無理
リテラルの中とかコードブロックの中とかはダメよ
Scrapboxはどうしてるんだろ?
えー、マジでScrapboxさん、どうやってるの?sta.icon*2
ソース見せてくれ~w
たぶんトークン解析的にやるんだろうなぁ
先頭から見ていく
現在地がcodeblockやliteralだったらスキップする、みたいな
たぶんトークン解析的にやるんだろうなぁ
vscodeでできるか?
いや自力でつくればできるけど、syntax利用ってできない?
scopeで検索してもヒットしないので、無いよなsta.icon
原始的な自力
前から1文字ずつ見ていって「今はcodeblockの中」「literalの中」みたいな状態を常に持つ
scb記法は文法が単純なので、これでもカバーできるはず……
リンク文字列の取得は?
この場合、[の後、]が出るまでに間に出てきた文字列
(かつNGの状態でないときに出てきたもの)
置換する前の前処理は?
字面だけだとreplaceできないので
何か印付ける
[aaa] → [aaadmZqiJ] この場合は「mZqiJ」 ランダム文字列
これならまあまず被ることはない
いや、自力のトークン解析的なこと、やっぱり要るだろ……
そしたらLink.changeText()みたいなメソッド叩くだけでいける
でもなぁ、そんなん実装したくないけど……sta.icon*4
ひー
2
原始的な自力 → これはこれで煩雑……(前処理置換がある)
自力でトークン解析的な → できる気がしない、いやまあいつかはできるけど遠そう
---
もっと楽にできる余地を探したい