:note

ドキュメントで使用中の禁則と文字組みアキ量設定を表示

InDesignの禁則設定と文字組みアキ量設定でドキュメント内で使用中のもの(段落スタイルに登録されているだけのは含まない)を表示する豆スクリプト。

その前に

==メモ開始

禁則(kinsokuSet)も文字組みアキ量設定(mojikumi)も段落に設定する場合

“Can return: KinsokuTable, KinsokuSet enumerator or String.”

“Can return: MojikumiTable, String or MojikumiTableDefaults enumerator.”

とあるので、やってみると


var doc = app.documents[0];
var p = doc.selection[0].paragraphs[0];

// 文字組みアキ量設定
// OK
p.mojikumi = doc.mojikumiTables[0];
p.mojikumi = MojikumiTableDefaults.LINE_END_ALL_ONE_HALF_EM_ENUM;
p.mojikumi = 1246572593;
// custom setting => OK
p.mojikumi = "custom_mojikumi";
p.mojikumi = doc.mojikumiTables.item("custom_mojikumi");

// NG
p.mojikumi = "行末約物半角";// => 「なし」 になる
p.mojikumi = doc.mojikumiTables.item("行末約物半角");// => StringかEnumにしろError

// 禁則設定
// OK
p.kinsokuSet = doc.kinsokuTables[0];
p.kinsokuSet = KinsokuSet.HARD_KINSOKU;
p.kinsokuSet = 1248357235;
// custom setting => OK
p.kinsokuSet = "custom-kinsoku";
p.kinsokuSet = doc.kinsokuTables.item("custom-kinsoku");

// NG
p.kinsokuSet = "強い禁則";// => 「禁則を使用しない」 になる
p.kinsokuSet = doc.kinsokuTables.item("強い禁則");// => StringかEnumにしろError

カスタム設定だと String や .itemByName() でいけるけどデフォルトプリセットはダメ、無理に使うと文字組みアキ量設定「なし」、「禁則を使用しない」になる。 どうしても使いたいなら何らかの形で index に持っていくとかが必要みたい。 ==メモ終了。

ドキュメントを開いた状態で実行すると最前面で使用中の設定を表示します。

ドキュメントで使用中の禁則と文字組みアキ量設定を表示 /images/2011/01/kinsoku_mojikumi_check.png
「なし」、「禁則を使用しない」も拾います


/**
 *  check used kinsoku set, mojikumi in most front document
 *  
 */

if (app.documents.length !== 0) {
  var doc = app.documents[0];
  alert(check_used_kinsoku_mojikumi (doc));
};

/**
 * check used setting
 * 
 * @param {Object} docObj Document
 * @returns {String} KinsokuTable and Mojikumi Aki Setting 
 */
function check_used_kinsoku_mojikumi (docObj) {
  //preset of kinsoku table
  var kin_obj = {
    1248357235 : "強い禁則",
    1263692659 : "韓国語禁則",
    1851876449 : "禁則を使用しない",
    1396927347 : "中国語簡体禁則",
    1249078131 : "弱い禁則",
    1413704563 : "中国語繁体禁則"
  };
  //preset of mojikumi aki setting
  var moj_obj = {
    1246572848 : "約物全角",
    1246572593 : "約物半角",
    1246572852 : "行末句点全角",
    1246572849 : "行末受け約物全角 / 半角",
    1851876449 : "なし",
    1246572598 : "行末約物全角 / 半角・段落1字下げ",
    1246572597 : "約物全角・段落1字下げ(起こし全角)",
    1246572601 : "行末約物半角・段落1字下げ",
    1246572851 : "行末句点全角・段落1字下げ(起こし全角)",
    1246572599 : "行末受け約物全角 / 半角・段落1字下げ(起こし全角)",
    1246572594 : "行末受け約物半角・段落1字下げ(起こし全角)",
    1246572596 : "約物全角・段落1字下げ",
    1246572850 : "行末句点全角・段落1字下げ",
    1246572600 : "行末受け約物全角 / 半角・段落1字下げ(起こし食い込み)",
    1246572595 : "行末受け約物半角・段落1字下げ(起こし食い込み)",
    1246572854 : "簡体中国語(標準)",
    1246572853 : "繁体中国語(標準)"
  }

  var storyObj = docObj.stories;
  //title (default array to push)
  var kin_arr = ["#Kinsoku Tables: "];
  var moj_arr = ["\n#Mojikumi Aki Settings: "];

  for (var si=0, siL=storyObj.length; si < siL ; si++) {
    var paragraphObj = storyObj[si].paragraphs;
    for (var pi=0, piL=paragraphObj.length; pi < piL ; pi++) {
      var para_kin = paragraphObj[pi].kinsokuSet;//enum or string
      var para_moj = paragraphObj[pi].mojikumi;//enum or string
      //push kinsoku table name
      var k = para_kin.name == undefined ? kin_obj[para_kin] : para_kin.name;
      kin_arr.push(k);

      //push mojikumi aki setting name
      var m = para_moj.name == undefined ?  moj_obj[para_moj] : para_moj.name;
      moj_arr.push(m);
    };
  };
  //message
  var reslt = [];
  var a = get_uniq_array(kin_arr);
  var b = get_uniq_array(moj_arr);

  return "Result\n" + reslt.concat(a,b).join('\n');
}

/**
 * return unique value array
 */
function get_uniq_array (array) {
  var dum_obj = {};
  var unq_arr = [];
  for (var i=0; i < array.length; i++) {
    if (! (array[i] in dum_obj) ){//if false
      // $.writeln((array[i] in dum_obj));
      dum_obj[array[i]] = true;
      unq_arr.push(array[i]);
    }
  };
  return unq_arr;
}
 
comments powered by Disqus
back to top