OSXでPDFから濁点付きのひらがなを普通にコピーする
OSXでPDFから濁点付きのひらがなを普通にコピーする:
Mac OSXでは,PDFから濁音付きの日本語をコピーしてどこかに貼り付けようとすると,変な感じになります。
これは,OSXでは平仮名の濁音を「◯+゛」の「2字」(結合文字列)で表現しようとする傾向があるため,なんじゃないかと思っています。
参考文献→文字コード地獄秘話 第2話:聖母マリアよ、二人を何故別々に? - ALBERT Engineer Blog
もっとも,JavaScriptではこうした結合文字列を等価性に基づく合成済み文字(例:て+゛→で)に正規化する
"て゛".normalize("NFC") という感じにすれば「で」になります。(「という感じ」というのは,この例は結合文字列ではなく単なる2文字なので,コピペしても動かない故。)
参考文献→String.prototype.normalize() - MDN web docs
そんでもって,Macでクリップボードやシステムサービス的なものを操作しようと思ったら,古くからAppleScriptが使われていたのですが,最近はJavaScriptを使うこともできます。
つまり,JavaScriptの標準機能を使って,OSから容易に呼び出せる,結合文字列をどうにかするサービスを作ることができます。たとえばAutomator+JavaScriptで「クイックアクション」の「サービス」にしてシステム環境設定でキーボードショートカットを割り当てるとこんな感じに。
Automatorで【新規作成→クイックアクション】。
JavaScriptを実行→クリップボードにコピー。
JavaScriptの内容はこんな感じ。
上記はAutomatorのワークフローとして作りましたが,たとえばクリップボード内に置いたまま操作することも考えられます。
私の場合,他にも,半角を全角にしたりとか(裁判所への提出文書は全角にする慣行なので…)その他諸々の処理を加えたいので,こんな感じのスクリプトを作っています。
使い方:PDF等から任意の文字列をコピーし,上記スクリプトを実行してから貼り付ける。
AppleScript的な感じでJavaScriptでクリップボードを扱う場合,まずStandardAdditionsを呼び出せるようにする必要がある点に注意。
参考文献→JavaScriptによるMacの自動操作入門の情報まとめ - 大石製作ブログ
スクリプトエディタ.appで上記スクリプトを作って,スクリプトメニューから使用。
→インストール方法委細 AppleScript ことはじめ - Script Factory
これでてきとーな判決文からコピペして裁判所提出文書作成が容易に!
Mac OSXでは,PDFから濁音付きの日本語をコピーしてどこかに貼り付けようとすると,変な感じになります。
これは,OSXでは平仮名の濁音を「◯+゛」の「2字」(結合文字列)で表現しようとする傾向があるため,なんじゃないかと思っています。
参考文献→文字コード地獄秘話 第2話:聖母マリアよ、二人を何故別々に? - ALBERT Engineer Blog
もっとも,JavaScriptではこうした結合文字列を等価性に基づく合成済み文字(例:て+゛→で)に正規化する
String.normalize(form)
が実装されています。"て゛".normalize("NFC") という感じにすれば「で」になります。(「という感じ」というのは,この例は結合文字列ではなく単なる2文字なので,コピペしても動かない故。)
参考文献→String.prototype.normalize() - MDN web docs
そんでもって,Macでクリップボードやシステムサービス的なものを操作しようと思ったら,古くからAppleScriptが使われていたのですが,最近はJavaScriptを使うこともできます。
つまり,JavaScriptの標準機能を使って,OSから容易に呼び出せる,結合文字列をどうにかするサービスを作ることができます。たとえばAutomator+JavaScriptで「クイックアクション」の「サービス」にしてシステム環境設定でキーボードショートカットを割り当てるとこんな感じに。
たとえばこんなコード
Automatorで【新規作成→クイックアクション】。
JavaScriptを実行→クリップボードにコピー。
JavaScriptの内容はこんな感じ。
function run(input, parameters) { // Your script goes here return input.toString().normalize("NFC"); }
おまけ:クリップボード内を操作する。
上記はAutomatorのワークフローとして作りましたが,たとえばクリップボード内に置いたまま操作することも考えられます。私の場合,他にも,半角を全角にしたりとか(裁判所への提出文書は全角にする慣行なので…)その他諸々の処理を加えたいので,こんな感じのスクリプトを作っています。
法曹用正規化コピー.scpt
var app = Application.currentApplication(); app.includeStandardAdditions = true; var cb = app.theClipboard(); cb = cb.split("\r").join("\n"); // \rを普通の改行に cb = cb.normalize("NFC"); //合成文字を単文字化 cb = cb.replace(/[^\x01-\x7E] [^\x01-\x7E]/g, function(s) { //全角文字間の半角スペース削除 return s.split(" ").join(""); }); cb = cb.replace(" "," "); //残った半角スペースを全角化 cb = cb.replace(/[A-Za-z0-9\(\)]/g, function(s) { //半角文字を全角化 return String.fromCharCode(s.charCodeAt(0) + 0xFEE0); }); app.setTheClipboardTo(cb);
AppleScript的な感じでJavaScriptでクリップボードを扱う場合,まずStandardAdditionsを呼び出せるようにする必要がある点に注意。
参考文献→JavaScriptによるMacの自動操作入門の情報まとめ - 大石製作ブログ
スクリプトエディタ.appで上記スクリプトを作って,スクリプトメニューから使用。
→インストール方法委細 AppleScript ことはじめ - Script Factory
コメント
コメントを投稿