─グーテンベルクの遙か彼方へ─このブログはEPUB3をはじめとした電子書籍制作の現場からの「現地レポート」を目指しています。電子書籍制作、アプリケーション開発など、多方面の方々からの積極的なご意見をお待ちしております。※『InDesign→EPUB3用XHTML作成ワークフロー』は通常エントリに移動しました。『ジャンル別まとめ/ダウンロード』からアクセスできます。前ページへmi内でタグ以外の箇所の半角英数字を一括全角置換したい2018/04/05電書で縦書きの本を作ることが多いため、テキストエディタ「mi」内でXHTMLファイル内の半角英数字を全角に打ち替えなければならないことが時々あります。なんでそういうことになるのかと言えば、InDesignのデータ内では半角の英数字でも段落の設定次第で正立させて表示できるんですね。XHTMLとして書き出してしまうとそういう設定は飛んでしまうので半角英数字として横転してしまいます。これまでできるだけInDesign内で半角から全角に置換するようにしていましたが、やはり書き出してしまってから置換できてなかったのが判明して手で打ち替えるというケースがそれなりにあり、特に長めの単語ではめんどくさいし入力ミスが怖いなーと思っておりました。いうことで普段使っているテキストエディタ「mi」内で気軽に置換できるようにしたので以下メモです。やりたいことmiに書き出した段階ではXHTMLタグテキストの編集になるため、タグ部分は除外して置換処理をしたいテキスト全体ではなく該当部分を選んで置換処理をかけたいできるならショートカットで置換できるように設定したいPerlでの置換処理の内容Perlで処理するための置換コード自体は以下。処理としてはテキストを<>で括られた文字列(要はXHTMLのタグ)を区切り文字として分割し、配列内各要素がタグかどうかを判定してタグではないものに対してのみ置換処理をかけています(なので使用者がタグの真ん中あたりから適当に範囲選択したりするとアレなことにはなるけどそれは無視)。ここいらのコードは市川せうぞーさんにヒントをいただきました。ありがとうございます。$_;ワンライナー化してAppleScriptに組み込むこれをワンライナー化してAppleScriptに組み込むことでmiでの現在の選択部分に対して置換をかけられるようになります。run」の行に関してはmi内のツールから実行するための記述なので、単体アプリとして保存して使うならなくてよいです。範囲選択した状態でアプリを実行すれば大丈夫。miのモードにスクリプトを組み込む方法については詳述はしないのでmi公式ページなど見てください。実例としては以前に作ったこれの「その他」(Miscellaneous)フォルダに各種仕込んだりしてます。キーボードショートカットで使えるようにしてさらに便利にで、これをキーボードショートカット一発で使えると本当に快適だなーと思って調べていたのですが、macOS設定メニュー内、キーボード項目のショートカット設定で行けるという情報を見つけました。何でも行けるじゃないですかこれなら。ついでにひらがな←→カタカナの変換も仕込みました。そちらもタグは除外して置換するようにしました。XHTMLのタグ内にカナとか漢字が混じってるとは思えないけど。タグの部分以外が一括で置換された他にも仕事ごとにいろいろ仕込んで使えそうだけどまあそこいらはおいおい。»NumbersからCSVを書き出すドロップレット2018/03/12ちょっと前からNumbersの新バージョンでAppleScriptを使ってCSVをエクスポートしようとするとエクスポートに失敗する上にNumbersの元ファイルが壊れて開けなくなるという不具合が出てまして、旧バージョンのNumbersを使うことでごまかしていたのですが、マシン更新でさすがにごまかしきれなくなってきたので適当に英語のフォーラムを漁ってどうにかしました。サンプルコードがフォルダ選択なのをドロップレットにした以外何にもしてませんが、また数年後に同じネタでハマってググるの嫌なので備忘録として置いておきます。ドロップレットとして使うにはスクリプトエディタにペーストしてアプリとして保存してね。ファイル壊れるってよっぽどだよな。あと未だにAppleScriptの型変換苦手です。「自然順ソート」あれこれ2016/09/20最近ちょっとしたツールを作っていて、スクリプト内で「Finderの表示順にファイルをソート(整列)させたい」という要件がありまして、なかなかに手こずったので今後のために備忘録としてまとめておきます。Finderでのソート順って?まず、Finderでのソート順って何かっていいますと、ファイル1,ファイル2,ファイル3...ファイル10,ファイル11,ファイル12となるようなソート方法のことです。文字列の後に数字が来るような場合でも数値順にソートさせたい。perlなどで普通に文字列順にソートさせても数値でソートさせてもファイル1,ファイル10,ファイル11,ファイル12,ファイル2,ファイル3...となってしまい、思ったような処理ができません。照合順番を実装していると木田さんが言ってたような。2016年9月11日とのことらしく。ありがとうございます@ogwataさん。照合順番で定義されてるようなソート方法を「自然順ソート」と言うらしいのですが、PerlだとSort::Naturallyあたりのモジュールを利用すればできる模様(参考)。今回は配布ツールでの使用を考えているので、CPANからモジュールを入れる的な話はできれば避けたく、いろいろと違う方向性を模索していたわけです。Xojo内でCocoaのライブラリを呼び出してソートフロントエンドのツールはXojoなので、Xojo内でできればなと思って、過去にQiitaにされていたアップされていたこちらの神エントリをもとにどうにかソートできるようにしたのが以下。@monokanoさん。mySortedArray()Xojo内でモジュール化しておいて元の配列を投げ、ソート後の配列を得る、みたいな使い方です。今回の目的としてはFinderのソート順の再現なので、Finderと同じエンジンを使うこちらが一番目的に叶いそうです。Cocoaのライブラリを呼び出している以上Mac専用にはなります。Applescriptでの自然順ソートAppleScriptでもできそうかなということでこちらの投稿をもとに作ってみたのが以下。joinList他の処理系に投げるので一回文字列に結合して引数として投げ、ソートした後に再結合した文字列を得ます。それをまた分解して配列に。AppleScriptはテキストアイテムデリミタでの文字列の分解結合処理がいつもながらややこしいのですが、そのあたりはまあご愛敬ということで。こちらもAppleScriptを使う以上Mac専用です。そのうちAppleScriptで自然順ソートさせなきゃならないケースも出てくるかも知れないし。PHPのnatsort関数でソートPHPには自然順ソートができるnatsortという関数がデフォルトで入っているとのことなのでやってみたのが以下。$myArray);print($joinedString);?>一番簡単かも。Mac環境に依存しないのでそういう意味での使い出もありそうです。KBDownloadに置いておきます。◇で、ブログにまとめてたら最後になんかPerlでモジュールを使わずにできそうなサンプルを発見してしまった。最初に出てきて欲しかった(汗)。(2016.9.20)追加情報メモ。nameで並べ替えちゃうのが手っ取り早いと。処理は遅いから大量のファイル処理には向かないとのこと。Xでもバージョンによって微妙にソート結果が変わったりするらしい。確実にFinderのソート順通りのソート結果が欲しければApplescript上からFinderを呼び出して値を取得するか、Cocoaのライブラリを呼び出してソートさせるかするしかない。・対象がファイル名ならPerl内からosascriptでApplescript呼んでFinderに聞くのが手っ取り早いんじゃないのと言われたのでちょい試しました。joinList行けますね。Tajimaこちらにて、電子書籍&Web制作を担当しています。このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。整うことを願って、現場からの声を発信していこうと目論んでおります。当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。License.『電書魂』のコンテンツはクリエイティブ・コモンズによりライセンスされています。記事名の記載と、記事へのリンクを貼って頂ければ、コンテンツを自由にご利用いただくことができます。