chalcedony_htnの日記スマートフォン用の表示で見るchalcedony_htnの日記この広告は、90日以上更新していないブログに表示しています。JavaScriptとってもお久しぶりです。最近アウトプット減ってて*1インプットも滞っています。スクリプトもまとまったものはあまり書いてないんですが、久しぶりに汎用っぽいのができたのでおすそわけ。書いてる人がいたらすいません......ライブラリの各アイテムを自動でまとめて配置するたとえばコンピュータ関連の解説書とかで「Ctrl+Pを押します」なんて書いたりして、それぞれのキーを絵で表現したりするようなとき。フォントを作っちゃうのも手なんですが、そこまでする数じゃないような場合はライブラリを使うと便利。ひとつずつD&Dして配置するのはめんどくさいです。私なら3つくらいやったとこでイラッと来ます。いうわけでこんなのを書きました。CS4でのみ行っています。「#(半角英数のアイテム名)」という文字列が選択範囲内に見つかったら、指定したライブラリ内の同名アイテムで置換します。何も選択していない場合はドキュメント全体を処理します。配置したオブジェクトはインラインオブジェクトになります。インラインオブジェクトの各種テキストスタイル属性は置換元の最後の文字(「#name」なら「e」)と同じになります。何か選択されていたらその中だけ。ライブラリから読み込み。検索された文字列をアイテム名として扱う。}}注意点は画像に書いたとおり。正規表現検索の使えるCS3以上が対象、アイテム名に半角英数以外は(記号も)使えません。使うときは★をつけた行でライブラリ名(ファイル名)を指定してください。場合によるとは思うけど実際使うときは、元の「#アイテム名」のテキストに文字スタイルをつけておいて、その文字スタイル限定で検索するようにしたほうが安全じゃないかと思います。"ほげほげ文字スタイル名";とか追加したり。処理後のインラインオブジェクトに文字スタイルが残るので、あとでまとめて検索もしやすいです。以下、蛇足せっかくなので勉強がてらちょっぴり修正してみます。名前を発見するたびにいちいちライブラリを見に行くのは効率悪い気がしたので、最初にアイテムをリストアップしてアイテム名をキーとするオブジェクトに格納してしまうことにしました。ついでに、いちいち選択解除するのがめんどくさいので、テキストカーソルを立ててるだけの状態のときはドキュメント全体を処理するようにします。}})();こんな感じ。よーしと思って大量に配置するサンプルを用意して処理速度を計ってみたら......ほとんど変わんなかったorzネックはどこにあるのかな*2。ドキュメントを描画なしで開いて処理したら速そうな予感はあるけど、心折れたので試してません。蛇足(未解決)最初に書いたとき、置換処理は次のように書いてました。~~~~~~~~~~検索で引っかかったテキスト部分をplaceAssetで上書きしてしまえばいいと思ったのです。実際それでもうまくいっていたんですが、「#name#name」など検索対象が連続しているときに不具合が出ました(前のほうの#name、つまりあとに処理されるほうが置換されない)。調べた結果、二回目の(つまり前のほうの)f[i].contentsに直後のインラインオブジェクトまで含まれてしまうからということがわかりました。それで「『name(オブジェクト)』なんて名前のアイテムはない」と処理がスキップされたようです。f[i].toSpecifier()すると範囲は5文字ぶんのはずなのに、f[i].lengthをとると6が出て、f[i].contentsを表示してみると最後にオブジェクトが入っているという謎現象。私の理解がへんなのかなあ?......とりあえず回避するため、textを扱うのは危険ということで文字単位で追加、文字単位で削除という形にしたのでした。CS3〜)Tweet広告を非表示にする関連記事2015-02-26InDesignのDOMをprototypeで拡張するメモ2昨日かいたやつがeveryItem()やitemByRange()で取得したオブジ...2014-05-07JavaScriptのArray.sort覚え書きお蔵出しシリーズ3。ExtendScriptのプリプロセッサディレクティブ月別アーカイブはてなブログをはじめよう!chalcedony_htnさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。