Help us understand the problem. What is going on with this article?

OSXでPDFから濁点付きのひらがなを普通にコピーする

More than 1 year has passed since last update.

Mac OSXでは,PDFから濁音付きの日本語をコピーしてどこかに貼り付けようとすると,変な感じになります。
スクリーンショット 2019-01-12 15.29.18.png
これは,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で「クイックアクション」の「サービス」にしてシステム環境設定でキーボードショートカットを割り当てるとこんな感じに。
スクリーンショット 2019-01-12 15.47.42.png

たとえばこんなコード

スクリーンショット 2019-01-12 15.51.48.png
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);

使い方:PDF等から任意の文字列をコピーし,上記スクリプトを実行してから貼り付ける。

AppleScript的な感じでJavaScriptでクリップボードを扱う場合,まずStandardAdditionsを呼び出せるようにする必要がある点に注意。
 参考文献→JavaScriptによるMacの自動操作入門の情報まとめ - 大石製作ブログ
スクリプトエディタ.appで上記スクリプトを作って,スクリプトメニューから使用。
 →インストール方法委細 AppleScript ことはじめ - Script Factory

これでてきとーな判決文からコピペして裁判所提出文書作成が容易に!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away