Skip to main content
March 10, 2017
Answered

List of all scripts labels

  • March 10, 2017
  • 1 reply
  • 1238 views

Hi everyone,

Is it possible to have the list of all labels associated to a textframe ?

Example :

     txtfrm.insertLabel "key1", "value1"

     txtfrm.insertLabel "key2", "value2"

     txtfrm.insertLabel "key3", "value3"

     txtfrm.getAllLabels  --> "key1, key2, key3"

Thanks.

Cyril

This topic has been closed for replies.
Correct answer Loic.Aigon

var txtfrm = app.selection[0];

txtfrm.insertLabel ("key1", "value1")

     txtfrm.insertLabel ("key2", "value2")

     txtfrm.insertLabel ("key3", "value3")

var getLabels = function(item) {

  var f = File(Folder.desktop+"/"+item.id+".idms" ),

  x, a, o = {}, keys, n;

  if  ( !(item.exportFile instanceof Function) ) return;

  item.exportFile ( ExportFormat.INDESIGN_SNIPPET,  f );

  if ( !f.exists ) return;

  f.open("r");

  x = XML ( f.read() );

  f.close();

  f.remove();

  keys  = x..KeyValuePair;

  n = keys.length();

  if ( !n ) return;

  while ( n-- )  {

  o[String(keys.@Key)] = String(keys.@Value);

  }

  x = null;

  return o;

}

var labels = getLabels ( txtfrm );

alert ( labels? labels.toSource() : "None" );

1 reply

Loic.Aigon
Loic.AigonCorrect answer
Legend
March 10, 2017

var txtfrm = app.selection[0];

txtfrm.insertLabel ("key1", "value1")

     txtfrm.insertLabel ("key2", "value2")

     txtfrm.insertLabel ("key3", "value3")

var getLabels = function(item) {

  var f = File(Folder.desktop+"/"+item.id+".idms" ),

  x, a, o = {}, keys, n;

  if  ( !(item.exportFile instanceof Function) ) return;

  item.exportFile ( ExportFormat.INDESIGN_SNIPPET,  f );

  if ( !f.exists ) return;

  f.open("r");

  x = XML ( f.read() );

  f.close();

  f.remove();

  keys  = x..KeyValuePair;

  n = keys.length();

  if ( !n ) return;

  while ( n-- )  {

  o[String(keys.@Key)] = String(keys.@Value);

  }

  x = null;

  return o;

}

var labels = getLabels ( txtfrm );

alert ( labels? labels.toSource() : "None" );

Legend
March 10, 2017

Ingenious! Very clever Loic.

P.

Edited to say.

Expensive in time. but still very clever.