Scrapboxにマーカーとコメントを記録する
annoでWebページにマーカーを引くとき、Scrapboxには以下のようなデータが記録される。
scrapbox
[annos://example.com/]
[🍀 https://example.com/#e=domain&p=%0A%0A++++Example+Domain%0A++++This+&s=+is+for+use+in+illustrative+exam]
> domain
コメント[hata.icon][like.icon]
[annos://example.com/]
マーカーを引いたWebページのURL。
https://example.com/ におけるマーカーであることを表す。
[🍀 https://example.com/#e=domain&p=%0A%0A++++Example+Domain%0A++++This+&s=+is+for+use+in+illustrative+exam]
Webページ内におけるマーカーの位置を、Text Quote Selectorとして記録している。
exact (e)
domain
prefix (p)
\n\n Example Domain\n This
suffix (s)
is for use in illustrative exam
コメント[hata.icon][like.icon]
コメントおよびアイコン。
Scrapboxのアイコン記法で表現している。
以下のようなアイコンを、Scrapboxプロジェクトに登録してある。
[hata.icon]
⇨ [like.icon]
⇨ マーカーの位置は、Text Quote Selectorを含むURLとして記録されている。
URLは本来URLエンコードされている必要があるが、Scrapboxでは一部の文字をエンコードせずに書き込める。
以下のURLをScrapboxに書き込んでクリックすると、同じWebページが開く。
エンコードしたURL
一部の文字をエンコードしないURL
日本語をエンコードしないことで、短く読みやすいURLを生成できる。
annoでは正規表現のUnicodeプロパティを利用して、簡易的にURL生成している。
Unicodeプロパティ
\p{scx=Hiragana}
ひらがなにマッチする。 \p{scx=Katakana}
カタカナにマッチする。 \p{scx=Han}
漢字にマッチする。https://github.com/hata6502/anno/blob/main/src/url.ts
export const encodeForScrapboxReadableLink = (uriComponent: string) => {
let encoded = encodeURIComponent(uriComponent);
for (const match of uriComponent.matchAll(
/[\p{scx=Hiragana}\p{scx=Katakana}\p{scx=Han}]/gu
)) {
encoded = encoded.replace(encodeURIComponent(match[0]), match[0]);
}
return encoded;
};