小物マクロの投下。 --青空文庫のルビ(《》で囲まれた部分と|)、注([#]で囲まれた部分)を除去 tell application "Jedit X" tell document 1 replaceAll string "(《.+?》|||[#.+?])" to "" with grep and select all end tell end tell
21 :
マクロの解説。 --Jedit Xというアプリケーションに命令を送る、という宣言 tell application "Jedit X" --アプリケーションの最前面にある書類に命令を送る、という宣言 tell document 1 --(《.+?》|||[#.+?])を書類全体に対し正規表現で検索し、全てを"何もなし"に置換 replaceAll string "(《.+?》|||[#.+?])" to "" with grep and select all --最前面にある書類への命令終了を表す宣言 end tell --Jedit Xというアプリケーションへの命令終了を表す宣言 end tell
というわけで、このshift-jis非互換文字を 互換文字に置換するマクロを作ってみました。 --shift jis非互換文字を互換文字に置換 tell application "Jedit X" tell document 1 --以下の半角のヌとネは、スクリプトエディタにコピペしてコンパイルすると、 --それぞれ半角の 《 と 》に置き換わるはず。 replaceAll string ヌdata utxt2015ネ to ヌdata utxt2014ネ with select all replaceAll string ヌdata utxtFF5Eネ to ヌdata utxt301Cネ with select all replaceAll string ヌdata utxtFF0Dネ to ヌdata utxt2212ネ with select all replaceAll string ヌdata utxt2225ネ to ヌdata utxt2016ネ with select all end tell end tell --ただ単に四回連続で検索置換を行なってるだけです…。 --四つの非互換文字を一発で変換するマクロを書ける人がいたら、 --投下お願いします。
25 :
毎回四回も検索置換が掛かるのがウザイという人は、 不要な命令行の頭に--(半角ハイフン2つ)を追加して コメントアウトしてしまえばいいと思います。 とりあえず「―」と「〜」だけ置換されればいいという人は、 先程のスクリプトの真ん中部分を以下のものに置き換えればOK。 replaceAll string ヌdata utxt2015ネ to ヌdata utxt2014ネ with select all replaceAll string ヌdata utxtFF5Eネ to ヌdata utxt301Cネ with select all --replaceAll string ヌdata utxtFF0Dネ to ヌdata utxt2212ネ with select all --replaceAll string ヌdata utxt2225ネ to ヌdata utxt2016ネ with select all
tell application "Jedit X" tell document 1 activate --以下の半角のヌとネは、スクリプトエディタにコピペしてコンパイルすると、 --それぞれ半角の 《 と 》に置き換わるはず。 replaceAll string ヌdata utxt2015ネ to ヌdata utxt2014ネ with select all replaceAll string ヌdata utxtFF5Eネ to ヌdata utxt301Cネ with select all replaceAll string ヌdata utxtFF0Dネ to ヌdata utxt2212ネ with select all replaceAll string ヌdata utxt2225ネ to ヌdata utxt2016ネ with select all do menu item "すべてを選択" do menu item "コピー" do menu item "削除" do menu item "ペースト" end tell end tell
27 :
上で使ったdo menu item命令は、解説するまでもないですが、 メニューバーにある項目を実行する命令です。 ただ、do menu itemはどうも不安定な命令なので(時々エラーが出るっぽい)、 一つ目のdo menu item命令が成功したのを確認した上で 残りの三つを実行するようにしたほうが安全かな。 というわけで、 >>26のdo menu item 4連発のところを以下のように 置き換えた方がよさげです。 --------- if (do menu item "すべてを選択") is true then --一つ目のdo menu item命令"すべてを選択"がうまくいった時のみ --続く三つの命令も実行 do menu item "コピー" do menu item "削除" do menu item "ペースト" else --一つ目のdo menu item命令がうまく行かなかった時 display dialog "エラーが起きました" buttons {"OK"} default button {"OK"} error number -128 --エラーを出してスクリプトを終了 end if ---------
>>32 同じ現象に悩んでる人がいるかもしれないし、 こっちにレスでもまあ、問題ないのでは。 レスついでに小物マクロ投下。 --選択範囲の文字数をカウント(改行、スペース、タブを除く) tell application "Jedit X" tell front document activate set theText to selected text set allNum to count character of theText set theCountNum to count item of (findAll string "( | |¥¥n|¥¥t)" with grep) set planeNum to allNum - theCountNum as string --結果をダイアログで表示 display dialog planeNum & " 文字です。" buttons {"OK"} default button {"OK"} end tell end tell
37 :
あ、上のスクリプト、半角の¥マークは半角のバックスラッシュに置き換えて使って下さい。 マクロの解説。 --選択範囲の文字数をカウント(改行、スペース、タブを除く) tell application "Jedit X" tell front document activate --変数theTextに、「selected text」つまり、選択範囲の文字列を格納。 set theText to selected text --変数theTextに格納された選択範囲の文字列が何文字あるかをカウント。 --その文字数を変数allNumに代入。 set allNum to count character of theText --正規表現で半角スペース、全角スペース、改行、タブを一括検索。 --それらの文字が合計何個見つかったかをカウントし、変数theCountNumに代入。 --なお、¥マークは半角のバックスラッシュに置き換えてください。 set theCountNum to count item of (findAll string "( | |¥¥n|¥¥t)" with grep) --※正規表現の部分の¥n(改行)と¥t(タブ)についたバックスラッシュ(¥)が -- 二重になっているのは、AppleScript上で特別な意味を持つバックスラッシュの -- 効力を打ち消す(エスケープする)ためです。 -- 検索文字列としてJeditに送られた際は、ちゃんとバックスラッシュ一つになります。 --(続く)
38 :
--(続き) --選択範囲の文字数から、スペース、改行、タブの個数分数字を引く。 --その結果を変数planeNumに文字列として代入。 set planeNum to allNum - theCountNum as string --結果をダイアログで表示 display dialog planeNum & " 文字です。" buttons {"OK"} default button {"OK"} end tell end tell 正規表現の解説。 ※¥はバックスラッシュと読み替えてください ( | |¥¥n|¥¥t) (全角スペース) |…または (半角スペース) |…または ¥n…改行 |…または ¥t…タブ これらの要素を()で括っている(括弧はたぶん無くても動く)。
>>81 正規表現をうまく書けば、一発で1〜3の処理ができるよ。 空白行、行頭のスペース、行頭の全角括弧4種を検索に引っかからないようにするとこんな感じ。 --行頭に全角スペースを追加 tell application "Jedit X" tell front document replaceAll string "^(?![¥¥s「『【(])" to " " with grep end tell end tell
レスありがとうございます。 >>82 4とバックスラッシュに書き換えて試してみたんですが、「string」がハイライトされて 「end of line など があるべきところですが class name が見つかりました。」 とのエラーがでてしまいました…… スクリプトのこと苦手でまるでわかってないんでw、もうちょっと調べてみます。 >>83 選択したら 「jMultiReplace J4 はどこですか?」と聞かれてテンテコ舞いにwww ぐぐってみます。