**Cosense::scrapboxの表記をmarkdownに変換
★この記事の後日談★2025/5/21
bookmarklet
webアプリ
scrapbox拡張(javascript)
について整理した.
scrapbox拡張で,jsを直接いじることで,カスタマイズした表記にも対応できることがわかり,かなりnotionへの移植が楽になった.
なので,この記事は記録のみ.
★この記事の後日談★2025/4/18
(scrapbox → cosense に変更された.が,ドメイン名はscrapboxのままじゃんか……)
markdown化するツールはwebツールのほうが便利だという結論に達したので,現在はそちらを主に使っている.
↑↑ hashrockさん多謝.
が,cosense側でかなりcssをカスタマイズしているために,このコンバータ一発では変換しきれない.流れは以下のようになる.
cosenseで書き書き
>Cosense Coverterでmd化
>vimで読み込んで mkmd マクロ実行:mkmdは自作
>さらに細かく調整
>notion に貼り付け,または >ローカルの.mdファイルとして保存
>notionなら印刷拡張を使う.mdファイルならchromeで読み込んで印刷
正直いうと,最終段階( camera ready )のツールとしてはワープロは一切使わない主義.
清書ツールとして typora を使っていたが,無料版がなくなったので今は使っていない.使うとすれば,notionだが,notionは印刷機能がプア.chrome拡張を使って印刷するほかに方法がなさげ.
→ ならば,mdファイルにしてchromeでmarkdown viewer拡張経由で読み込み,印刷するのがシンプルでベストかも.
なので結局,markdown化
★元記事★
scrapboxは便利だけど,表記法が独自仕様.
本文をいろんなところに移植したい時にはmarkdownの方がいいことが多い.
で,変換スクリプト作るかに~と思っていたら,bookmarkletとして作成してくれていた.
すばらしい.daiizさんありがとう.
さっそくGitHubからソースを頂き,main.min.jsファイルの先頭に"javascript:"を追加.
でも,D&Dではうまく登録できず.
ブックマークマネージャで新ブックマークを作成し,url欄にjsの中身をコピペ.
→ うまく働いた!ただし,
箇条書きのインデントは全部半角4桁の空白になり,markdownエディタに貼り付けた時にうまく反映されないことがあった(TeamsとTyporaで確認)
ので,インデントについては一旦vimで2桁ずつに変換したらうまくいった.
jsソースを調整したほうがいいかもね.
これのおかげで,scrapboxで書き書き → markdown → typora等で清書 → ワープロに貼り付け
という作業の流れができた.
↓↓ に貼り付けたスクリプトを示しておきます.(C)by daiiz
code:scrapbox2markdown
javascript:(function(){var m=function(b){b=b.replace(/&/g,"&");b=b.replace(/</g,"<");b=b.replace(/>/g,">");b=b.replace(/"/g,""");return b=b.replace(/'/g,"'")},n=function(b){b=void 0===b?0:b;for(var a="",g=1;g<b;g++)a+=" ";return a},p=function(b){b=void 0===b?"":b;var a=document.createElement("div");a.innerHTML=b;b=a.querySelectorAll("strong");for(var g=0;g<b.length;g++){var d=bg,e=+d.className.split("level-")1,c=d.innerHTML;e=void 0===e?1:e;e=6-e;for(var f="",h=0;h<e;h++)f+="#";d.innerHTML= f+" "+c}return a.innerHTML},q=function(b){b=void 0===b?"":b;var a=document.createElement("div");a.innerHTML=b;b=a.querySelectorAll("a");for(var g=0;g<b.length;g++){var d=bg,e=d.innerText.trim(),c=d.href;e=""+e+"("+c+")";var f=d.querySelector("img");null!==f&&(e="[!Image("+f.src+")]("+c+")");d.innerText=e}return a.innerText},f=document.querySelector(".lines"),r=f.querySelector(".line-title .text").innerText;f=f.querySelectorAll(".line");pageTexts=[];for(var l=1;l<f.length;l++){for(var c=fl.querySelector(".text").cloneNode(!0), h=c.querySelectorAll("span.empty-char-index"),a=0;a<h.length;a++){var k=ha;k.innerText=""}h=c.querySelectorAll("span.backquote");for(a=0;a<h.length;a++)k=ha,k.innerText="`";a=c.innerHTML.replace(/<span>/g,"");a=a.replace(/<span.+?>/g,"").replace(/<\/span>/g,"");a=a.replace(/<br.+?>/g,"");a=a.replace(/\n/gi,"").replace(/\t/gi,"").trim();a=p(a);a=q(a);c=c.querySelector(".indent-mark");null!==c&&(k=+c.style.width.split("em")0/1.5*2,a=n(k)+"- "+a);null===c&&0<a.length&&"#"!==a0&&(a+="<br>");pageTexts.push(a)}(function(b, a){b=void 0===b?"Title":b;a=void 0===a?[]:a;for(var c="# "+b+"\n",d=0;d<a.length;d++)c+="\n"+ad;a=window.open();a.document.open();a.document.write("<title>"+b+"</title>");a.document.write("<pre>");a.document.write(m(c));a.document.write("</pre>");a.document.close()})(r,pageTexts)})();