2012-10-15

ややこしい方法でテキスト中の文字列を連番つきに置き換えてみる話

wordでいただいた原稿テキストに150個前後の脚注がはいっています。テキストで保存すると本文中の脚注記号が全部ただの半角スペースにおきかわってしまいます。Indesignにwordを直接配置すると、Indesignの脚注として読み込める。。。はずですがなぜだか番号がズレてしまいます。なんとかして本文中に註1註2….という風に脚注の番号のついたテキストをつくりたい。ということでややこしい方法でやってみました。
下ごしらえとして、元原稿をコピーした作業用のファイルでword上で、脚注記号^fを一括で【註】に置換してしまいます。

やりたいこと
テキストの中の文字列(例【註】)を検索/置換して連番付き(例 【註1】【註2】…)に置き換えたい。

作戦
CotEditorでJavascriptでスクリプトで処理する。

準備
いろいろインストールする
CotEditorはいろいろな言語でスクリプトを書くことができるようです。Javascriptでスクリプトを書くために、
Javascriptの実行環境spidermonkeyをインストールするためにパッケージ管理ツールhomebrewをインストールするために開発環境Xcodeからインストールをはじめます。
 Xcode(Appleの開発環境) をインストール
  App Storeで無料のXcodeをダウンロード、インストール。
  さらに、command_line_tools_for_xcodeをダウンロード、インストール。
 homebrew(パッケージ管理システム)をインストール
  ターミナルで以下を実行する。
  ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)
  brew doctor
  brew update
 spidermonkey(javascriptエンジン)をインストール
  brew install spidermonkey

スクリプトを書く
ともかくできたのがこれ。素人なのでたぶん間違ったこともしているのではないかと。


#!/usr/local/bin/js
// %%%{CotEditorXInput=Selection}%%%
// %%%{CotEditorXOutput=ReplaceSelection}%%%

var renban = 1;
var line = '';
while (line = readline()) {
var parts = line.split("【註】");
var j = parts.length - 1;
for (i = 0; i < j; i++) {
parts.splice(i, 1, parts[i] + "【註" + renban + "】");
renban ++;
}
var result = parts.join("");
print (result);
}

quit();

/Users/●●/Library/Application Support/CotEditor/ScriptMenu
に保存します。拡張子は.shにします。

実行する
置換したい元のテキストファイルを開いて、テキストを選択します。
スクリプトメニューから保存したスクリプトを選び、実行します。
注意 途中に空行があるとそこで処理が終わってしまって、空行からあとのテキストが消えます。

スクリプトの内容
一応一行ずつ意味を書いておきます。自分でわかる範囲で。

#!/usr/local/bin/js
spidermonkeyのコマンドのありか。

// %%%{CotEditorXInput=Selection}%%%
CotEditor上の選択部分をスクリプトに入力として渡します。

// %%%{CotEditorXOutput=ReplaceSelection}%%%
スクリプトの実行結果をCotEditor上の選択部分と置き換えます。

var renban = 1;
連番を1に設定します。

var line = '';
テキストを読み込む入れ物を用意します。

while (line = readline()) {
1行ずつ読み込んで処理します。

var parts = line.split("【註】");
読み込んだ行を一旦、【註】のところでバラします。

var j = parts.length - 1;
バラしたパーツの数を数えておきます。

for (i = 0; i < j; i++) {
パーツの数だけ処理を行います。

parts.splice(i, 1, parts[i] + "【註" + renban + "】");
パーツの後ろに【註 と連番と 】をくっつけます。

renban ++;
連番を1つ増加させます。

var result = parts.join("");
パーツをくっつけて1行に戻します。

print (result);
できた行を出力します。

quit();
終了。

参考にしたサイトなど
http://odorusaboten.web.fc2.com/mac/coteditor_tips.html
http://www.ermine.jp/developer-blog/coders_at_work/spidermonkey_install/
http://mxcl.github.com/homebrew/