[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:1682) [JavaScript][Indesign CS3]num_glyph
選択テキストの数字字形を変更します。
このあいだのセミナーでデモやったやつの完全版(かも)。
処理として選べるのは
"すべてを標準字形にする",
"すべてを二分字形にする",
"すべてを三分字形にする",
"すべてを四分字形にする",
"2桁だけを二分字形にする",
"3桁だけを三分字形にする",
"4桁だけを四分字形にする",
"2桁を二分字形に、3桁を三分字形にする",
"2桁を二分字形に、3桁を三分字形、4桁を四分字形にする"
いろいろテストしてみてください。特に不具合がないようなら表に公開します。
全角(FULL_WIDTH_FORM)も必要?
全角数字のグリフって好きじゃないんですよねえ。。。と個人的嗜好。
InDesign CS3でのみ動作します。CS2以前では動きませんし、対応するつもりもありません。
/*
num_glyph.jsx
(c)2007 www.seuzo.jp
選択テキストの数字字形を変更します。
2007.08.08 ver.0.1 AppleScript版プロトタイプ。
2007.09.18 ver.0.2 GUIをつけた。いろいろ処理を選べるようにした。JavaScriptで書き直し。
*/
////////////////////////////////////////////エラー処理
function myerror(mess) {
if (arguments.length > 0) { alert(mess); }
exit();
}
////////////////////////////////////////////リストダイアログ
/*
myTitle ダイアログ(バー)のタイトル
myPrompt メッセージ
myList ポップアップに展開するリスト
result 選択したリスト番号
*/
function listDialog(myTitle, myPrompt, myList){
var myTitle, myPrompt, myList;
var myDialog = app.dialogs.add({name:myTitle,canCancel:true});
with(myDialog){
with(dialogColumns.add()){
// プロンプト
staticTexts.add({staticLabel:myPrompt});
with(borderPanels.add()) {
with(dialogColumns.add()){
// ポップアップメニュー
var mySelecteditem = dropdowns.add({stringList:myList, selectedIndex:0});
}
}
}
}
// ダイアログボックスを表示
if(myDialog.show() == true){
var ans = mySelecteditem.selectedIndex;
//正常にダイアログを片付ける
myDialog.destroy();
//選択したアイテムの番号を返す
return ans
} else {
// ユーザが「キャンセル」をクリックしたので、メモリからダイアログボックスを削除
myDialog.destroy();
}
}
////////////////////////////////////////////正規表現検
//正規表現で検索して、ヒットオブジェクトを返すだけ
function my_regex(my_range_obj, my_find_str, my_change_str) {
//検索の初期化
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
//検索オプション
app.findChangeGrepOptions.includeLockedLayersForFind = false;//ロックされたレイヤーをふくめるかどうか
app.findChangeGrepOptions.includeLockedStoriesForFind = false;//ロックされたストーリーを含めるかどうか
app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
app.findChangeGrepOptions.includeMasterPages = false;//マスターページを含めるかどうか
app.findChangeGrepOptions.includeFootnotes = false;//脚注を含めるかどうか
app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか
app.findGrepPreferences.findWhat = my_find_str;//検索文字の設定
//app.changeGrepPreferences.changeTo = my_change_str;//置換文字の設定
return my_range_obj.findGrep();//検索の実行
}
////////////////////////////////////////////字形の一括変換
/*
my_obj 字形を変更したいテキストオブジェクト
my_gliph グリフフォーム(ex. AlternateGlyphForms.MONOSPACED_HALF_WIDTH_FORM;//半角字形
*/
function all_glyph_change(my_obj, my_gliph) {
for (var i = 0; i < my_obj.length; i++) {
my_obj[i].glyphForm = my_gliph;
}
}
/////実行
////////////////まずは選択しているもののチェック
if (app.documents.length == 0) {myerror("ドキュメントが開かれていません")}
var mydocument = app.activeDocument;
if (mydocument.selection.length == 0) {myerror("テキストを選択してください")}
var myselection = mydocument.selection[0];
var myclass =myselection.reflect.name;
myclass = "Text, TextColumn, Story, Paragraph, Line, Word, Character".match(myclass);
if (myclass == null) {myerror("テキストを選択してください")}
////////////////処理の選択
var myList = ["すべてを標準字形にする",
"すべてを二分字形にする",
"すべてを三分字形にする",
"すべてを四分字形にする",
"2桁だけを二分字形にする",
"3桁だけを三分字形にする",
"4桁だけを四分字形にする",
"2桁を二分字形に、3桁を三分字形にする",
"2桁を二分字形に、3桁を三分字形、4桁を四分字形にする"];
var ans_int = listDialog("num_glyph", "数字の字形を変更します。処理を選択してください?n", myList);
//myList[ans_int];
////////////////検索の実行
var hit_obj = my_regex(myselection, "[0-9]+", "");
if (ans_int == 0) {//すべてを標準字形にする
all_glyph_change(hit_obj, AlternateGlyphForms.NONE);
} else if (ans_int == 1) {//すべてを二分字形にする
all_glyph_change(hit_obj, AlternateGlyphForms.MONOSPACED_HALF_WIDTH_FORM);
} else if (ans_int == 2) {//すべてを三分字形にする
all_glyph_change(hit_obj, AlternateGlyphForms.THIRD_WIDTH_FORM);
} else if (ans_int == 3) {//すべてを四分字形にする
all_glyph_change(hit_obj, AlternateGlyphForms.QUARTER_WIDTH_FORM);
} else if (ans_int == 4) {//2桁だけを二分字形にする
for (var i = 0; i < hit_obj.length; i++) {
if (hit_obj[i].contents.length == 2) {
hit_obj[i].glyphForm = AlternateGlyphForms.MONOSPACED_HALF_WIDTH_FORM;
}
}
} else if (ans_int == 5) {//3桁だけを三分字形にする
for (var i = 0; i < hit_obj.length; i++) {
if (hit_obj[i].contents.length == 3) {
hit_obj[i].glyphForm = AlternateGlyphForms.THIRD_WIDTH_FORM;
}
}
} else if (ans_int == 6) {//4桁だけを四分字形にする
for (var i = 0; i < hit_obj.length; i++) {
if (hit_obj[i].contents.length == 4) {
hit_obj[i].glyphForm = AlternateGlyphForms.QUARTER_WIDTH_FORM;
}
}
} else if (ans_int == 7) {//2桁を二分字形に、3桁を三分字形にする
for (var i = 0; i < hit_obj.length; i++) {
if (hit_obj[i].contents.length == 2) {
hit_obj[i].glyphForm = AlternateGlyphForms.MONOSPACED_HALF_WIDTH_FORM;
} else if (hit_obj[i].contents.length == 3) {
hit_obj[i].glyphForm = AlternateGlyphForms.THIRD_WIDTH_FORM;
}
}
} else if (ans_int == 8) {//2桁を二分字形に、3桁を三分字形、4桁を四分字形にする
for (var i = 0; i < hit_obj.length; i++) {
if (hit_obj[i].contents.length == 2) {
hit_obj[i].glyphForm = AlternateGlyphForms.MONOSPACED_HALF_WIDTH_FORM;
} else if (hit_obj[i].contents.length == 3) {
hit_obj[i].glyphForm = AlternateGlyphForms.THIRD_WIDTH_FORM;
} else if (hit_obj[i].contents.length == 4) {
hit_obj[i].glyphForm = AlternateGlyphForms.QUARTER_WIDTH_FORM;
}
}
}