やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

rtをコピーしないようにする

 HTMLでルビを振ったあとブラウザでテキストコピーしたら漢字かんじみたくなるのを防ぐ方法。

問題

 ルビがテキストコピーされるとき、漢字とつながってしまう。

<ruby>漢字<rp></rp><rt>かんじ</rt><rp></rp></ruby>

漢字かんじ

 上記をブラウザで表示し、マウスで範囲選択してコピーすると漢字かんじになってしまう。

期待値

漢字(かんじ)

 JavaScriptにてtextContentを取得すれば期待値を得られる。

document.querySelector('body').textContent

 <rp>も書かねばならないのが面倒。もし<rp>がないと()がなくなり漢字とルビがつながってしまう。

 これと同じことをマウスのコピーでもやりたいのだが、簡単にはできないと思う。

妥協案

 ルビを無視する。

漢字

 CSSで以下のようにするとコピー時ルビを無視できる。

rt {
  -moz-user-select: none;
  -webkit-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

 このサイトのCSSはそうなっていると思われる。

期待と現実

期待

 ルビがあるとき、ルビなしとルビありの2種類取得したいときがある。

取得 動機
漢字 ルビを抜いた字数をカウントしたい
漢字(かんじ) テキストエディタで表示したい(読みやすいプレーンテキストが欲しい)

現実

 実際には以下のような残念さ。

取得 感想
漢字かんじ マウスコピーの結果。バカじゃないの? こんなの誰も望まないわボケ
漢字(かんじ) JSでtextContentにより取得可能。ただし括弧()<rp>が必要。

 なんとかしてくれ。

対象環境

$ uname -a
Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux