Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード Twitter

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2010-02-15

[][][][]選択テキストを長体(または平体)で指定ライン数に追い込む「shorten_line_selection 0.2」

何をするスクリプトか?

選択したテキスト部分を変形(長体・平体)させて、指定ライン数以内に収めます。

簡単な使い方はこちらをご覧ください。

D

同梱ファイル2Files

  • README.txt このファイルです。とにかく最初によんでください。
  • shorten_line_selection.jsx スクリプト本体です。

動作環境

このスクリプトが正常に動作する環境は以下の通りです。Windows環境でも動作する可能性がありますが、動作確認はしていません。

  • MacOS X10.6.2
  • InDesign CS4_J(6.0.4)

ダウンロード

http://www.seuzo.jp/st/scripts_InDesignCS4/index.html#shorten_line_selection


インストール

スクリプト本体(shorten_line_selection.jsx)を

~/Library/Preferences/Adobe InDesign/Version 6.0-J/ja_JP/Scripts/Scripts Panel/

にコピーしてください。エイリアスを入れておくだけでもかまいません。

スクリプトパレットから使用します。


使用方法

  1. 「ウインドウ」メニューから「スクリプティング」ー「スクリプト」を選択し、スクリプトパレットを出します。
  2. 変形をかけたい部分のテキストを選択します。
  3. スクリプトパレットから、スクリプト「shorten_line_selection.jsx」をダブルクリックします。
  4. テキストが変形されたのを確認してください。

設定

スクリプトをエディタまたはESTKで開くと、最初の部分に以下の設定があります。この設定値を変更すれば、簡単にカスタマイズできます。

  • 文字変形の限界値(%)。 長体(または平体)の限界値です。初期値は70
  • 何ライン以内に収めるか。 1を指定すれば、必ず1ラインに、2を指定すれば、必ず2ラインになります。特殊な値として、-1を指定すると選択テキストのライン数 - 1ラインとなります。-2は無効です。初期値は-1

既知の不具合、またはToDo、あるいは仕様

  • 変形は縮小方向のみに働きます。例えば、2ライン分を選択していて、3ラインになったりしません。
  • 「変形じゃなくて『文字ツメ』で解消したいんだよ」という内なる声が聴こえますが、このツールに混ぜるか、ちがうスクリプトにするか考えちうです。

免責事項

  • 本アプリケーションはInDesignにおける作業効率支援なのであって、処理結果を保証するものではありません。かならず確認をされることをおすすめします。
  • このツールを使用する上でデータの破損などのあらゆる不具合・不利益については一切の責任を負いかねますのでご了解ください。
  • このツールはすべてのMacintoshMac OS上で動作をするという確認をとっていませんし、事実上出来ません。したがって、動作を保証するものではありません。

ライセンス

GNU GPLv3

http://sourceforge.jp/projects/opensource/wiki/licenses%252FGNU_General_Public_License_version_3.0


履 歴

2010-02-10 ver.0.1 とりあえず

2010-02-15 ver.0.2 my_line_limitに「-1」を指定すると、常に-1ラインにするようにした。


ソースコード

/*
shorten_line_selection.jsx
選択したテキスト部分を変形(長体・平体)させて、指定ライン数以内に収めます。

2010-02-10	ver.0.1	とりあえず
2010-02-15	ver.0.2	my_line_limitに「-1」を指定すると、常に-1ラインにするようにした。
*/

//////////////////////////////////////////// 設定
var my_scale_limit = 70;//文字変形の限界値(%)
var my_line_limit = -1;//何ライン以内に収めるか。-1を指定すると、常に現状よりも-1ラインとなる。-2は無効。

////////////////////////////////////////////エラー処理 
function myerror(mess) { 
  if (arguments.length > 0) { alert(mess); }
  exit();
}



////////////////////////////////////////////文字の変形メソッド
////my_target_obj(テキストオブジェクト)を、最大my_scale_limit_num(%)まで変形して、my_line_limit_num(行)以内に収める
function set_scale(my_target_obj, my_line_limit_num, my_scale_limit_num) {
var tmp_org_scale, w;
	if (my_target_obj.parentStory.storyPreferences.storyOrientation === StoryHorizontalOrVertical.HORIZONTAL) {//横組み
		if (my_target_obj.lines.length > my_line_limit_num) {
			tmp_org_scale = my_target_obj.horizontalScale;
			for (w=tmp_org_scale; w >= my_scale_limit_num; w--){
				my_target_obj.horizontalScale = w;
				my_target_obj.recompose();//文字列の再描画
				if (my_target_obj.lines.length === my_line_limit_num) {break}//ライン行数が既定以内になったらやめる
				if ((w === my_scale_limit_num ) && (my_target_obj.lines.length > my_line_limit_num)) {//既定値まで頑張ったけれど行数を代えられなかった時
				my_target_obj.horizontalScale = tmp_org_scale;
				}
			}
		}
	} else if (my_target_obj.parentStory.storyPreferences.storyOrientation === StoryHorizontalOrVertical.VERTICAL) {//縦組み
		if (my_target_obj.lines.length > my_line_limit_num) {
			tmp_org_scale = my_target_obj.verticalScale;
			for (w=tmp_org_scale; w >= my_scale_limit_num; w--){
				my_target_obj.verticalScale = w;
				my_target_obj.recompose();//文字列の再描画
				if (my_target_obj.lines.length === my_line_limit_num) {break}//ライン行数が既定以内になったらやめる
				if ((w === my_scale_limit_num ) && (my_target_obj.lines.length > my_line_limit_num)) {//既定値まで頑張ったけれど行数を代えられなかった時
				my_target_obj.verticalScale = tmp_org_scale;
				}
			}
		}
	}
}


////////////////////////////////////////////実行処理
if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")}
var my_document = app.documents[0];
if (my_document.selection.length !== 1) {myerror("テキストを一カ所だけ選択してください")}
var my_selection = my_document.selection[0];
var my_class =my_selection.reflect.name;
my_class = "Text, TextColumn, Story, Paragraph, Line, Word, Character, TextStyleRange".match(my_class);
if (my_class === null) {myerror("テキストを選択してください")}

//my_line_limitに-1が指定されていた
if (my_line_limit === -1) {
	my_line_limit = my_selection.lines.length - 1;
	if(my_line_limit < 1) {myerror()}//1行以上は詰められないので終了
}

//変形処理
set_scale(my_selection, my_line_limit, my_scale_limit);//ファンクション呼び出し

seuzoseuzo 2010/02/19 12:13 自分メモ:次の書き直しでmgさんちを参考にすること。
http://www.milligramme.cc/weblog/2010/02/indesign-88.html
targetObj[HorV]--;

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証