So, ich habe jetzt noch weiter am Script herumgepfriemelt, weil mir die Lösung mit den hinzugefügten Funktionen nicht gefiel.
Deshalb habe ich versucht, die ganze Sache zu verallgemeinern. Herausgekommen ist das hier:
// CharStyle Extended.jsx
//Based on the "CharStyleOfPeterKahrel.js" Script of Peter Kahrel. Thx!
var zaehler=0;
attributes = new Array();
/***** Mehrdimensionales Array aus allen Parametern erzeugen *****/
function makeArray()
{
attributes[zaehler]= new Array();
for( x = 0 ; x < arguments.length ; x++ )
{
attributes[zaehler].push( arguments[x] );
}
zaehler++;
}
/******************* HINWEIS **********************
*
* Der Stilname MUSS immer als erster Wert an die
* Funktion makeArray übergeben werden.
*
* WICHTIG: Je mehr Attribute abgefragt werden,
* desto weiter oben muss der entsprechende
* Funktionsaufruf stehen.
*
***************************************************/
/******* 2 Attribute abfragen *******/
makeArray( 'Superscript Italic', 'fontStyle = "Italic"', 'position = Position.superscript' );
makeArray( 'Superscript Bold', 'fontStyle = "Bold"', 'position = Position.superscript' );
makeArray( 'Superscript Bold Italic', 'position = Position.superscript', 'fontStyle = "Bold Italic"' );
makeArray( 'Subscript Italic', 'position = Position.subscript', 'fontStyle = "Italic"' );
makeArray( 'Subscript Bold', 'position = Position.subscript', 'fontStyle = "Bold"' );
makeArray( 'Subscript Bold Italic', 'position = Position.subscript', 'fontStyle = "Bold Italic"' );
makeArray( 'Underline Bold Italic', 'underline = true' , 'fontStyle = "Bold Italic"' );
makeArray( 'Underline Bold', 'underline = true' , 'fontStyle = "Bold"' );
makeArray( 'Underline Italic', 'underline = true' , 'fontStyle = "Italic"' );
makeArray( 'StrikeThru Bold Italic', 'strikeThru = true' , 'fontStyle = "Bold Italic"' );
makeArray( 'StrikeThru Bold', 'strikeThru = true' , 'fontStyle = "Bold"' );
makeArray( 'StrikeThru Italic', 'strikeThru = true' , 'fontStyle = "Italic"' );
/******* 1 Attribut abfragen *******/
makeArray( 'Italic', 'fontStyle = "Italic"' );
makeArray( 'Bold', 'fontStyle = "Bold"' );
makeArray( 'Light Condensed', 'fontStyle = "Light Condensed"' );
makeArray( 'Light Condensed Italic', 'fontStyle = "Light Condensed Italic"' );
makeArray( 'Condensed', 'fontStyle = "Condensed"' );
makeArray( 'Condensed Italic', 'fontStyle = "Condensed Italic"' );
makeArray( 'Semibold Condensed', 'fontStyle = "Semibold Condensed"' );
makeArray( 'Semibold Condensed Italic', 'fontStyle = "Semibold Condensed Italic"' );
makeArray( 'Bold Condensed', 'fontStyle = "Bold Condensed"' );
makeArray( 'Bold Condensed Italic', 'fontStyle = "Bold Condensed Italic"' );
makeArray( 'Black Condensed', 'fontStyle = "Black Condensed"' );
makeArray( 'Black Condensed Italic', 'fontStyle = "Black Condensed Italic"' );
makeArray( 'Light SemiCondensed', 'fontStyle = "Light SemiCondensed"' );
makeArray( 'Light SemiCondensed Italic', 'fontStyle = "Light SemiCondensed Italic"' );
makeArray( 'SemiCondensed', 'fontStyle = "SemiCondensed"' );
makeArray( 'SemiCondensed Italic', 'fontStyle = "SemiCondensed Italic"' );
makeArray( 'Semibold SemiCondensed', 'fontStyle = "Semibold SemiCondensed"' );
makeArray( 'Semibold SemiCondensed Italic', 'fontStyle = "Semibold SemiCondensed Italic"' );
makeArray( 'Bold SemiCondensed', 'fontStyle = "Bold SemiCondensed"' );
makeArray( 'Bold SemiCondensed Italic', 'fontStyle = "Bold SemiCondensed Italic"' );
makeArray( 'Black SemiCondensed', 'fontStyle = "Black SemiCondensed"' );
makeArray( 'Black SemiCondensed Italic', 'fontStyle = "Black SemiCondensed Italic"' );
makeArray( 'Light', 'fontStyle = "Light"' );
makeArray( 'Light Italic', 'fontStyle = "Light Italic"' );
//makeArray( 'Regular', 'fontStyle = "Regular"' );
makeArray( 'Semibold', 'fontStyle = "Semibold"' );
makeArray( 'Semibold Italic', 'fontStyle = "Semibold Italic"' );
makeArray( 'Bold', 'fontStyle = "Bold"' );
makeArray( 'Bold Italic', 'fontStyle = "Bold Italic"' );
makeArray( 'Black', 'fontStyle = "Black"' );
makeArray( 'Black Italic', 'fontStyle = "Black Italic"' );
makeArray( 'Light SemiExtended', 'fontStyle = "Light SemiExtended"' );
makeArray( 'Light SemiExtended Italic', 'fontStyle = "Light SemiExtended Italic"' );
makeArray( 'SemiExtended', 'fontStyle = "SemiExtended"' );
makeArray( 'SemiExtended Italic', 'fontStyle = "SemiExtended Italic"' );
makeArray( 'Semibold SemiExtended', 'fontStyle = "Semibold SemiExtended"' );
makeArray( 'Semibold SemiExtended Italic', 'fontStyle = "Semibold SemiExtended Italic"' );
makeArray( 'Bold SemiExtended', 'fontStyle = "Bold SemiExtended"' );
makeArray( 'Bold SemiExtended Italic', 'fontStyle = "Bold SemiExtended Italic"' );
makeArray( 'Black SemiExtended', 'fontStyle = "Black SemiExtended"' );
makeArray( 'Black SemiExtended Italic', 'fontStyle = "Black SemiExtended Italic"' );
makeArray( 'SuperScript', 'position = Position.superscript' );
makeArray( 'SubScript', 'position = Position.subscript' );
makeArray( 'SmallCaps', 'capitalization = Capitalization.smallCaps' );
makeArray( 'Underline', 'underline = true' );
makeArray( 'StrikeThru', 'strikeThru = true' );
/***** Hier wird das mit makeArray erzeugte Array verarbeitet *****/
attr2style( attributes );
function attr2style( attributes )
{
for( var x = 0 ; x < attributes.length ; x++ )
{
app.findPreferences = app.changePreferences = null;
for( var y = 1 ; y < attributes[x].length ; y++ )
{
eval( 'app.findPreferences.' + attributes[x][y] );
}
app.findPreferences.appliedCharacterStyle = app.activeDocument.characterStyles[0];
app.changePreferences.appliedCharacterStyle = checkStyle( attributes[x] );
app.activeDocument.search( '', false, false, '' );
}
}
/***** Diese Funktion arbeitet mit dem übergebenen Teilarray aus attr2style weiter ******/
function checkStyle( attributesSection )
{
if( app.activeDocument.characterStyles.item( attributesSection[0] ) == null )
{
app.activeDocument.characterStyles.add( { name : attributesSection[0] } );
for( var x = 1 ; x < attributesSection.length ; x++ )
{
eval( 'app.activeDocument.characterStyles.item( attributesSection[0] ).' + attributesSection[x] );
}
}
return app.activeDocument.characterStyles.item( attributesSection[0] );
}
EDIT: Variable i in x und Variable j in y umbenannt wg. Darstellungsproblemen der Forensoftware.
Es werden jetzt nur noch 3 Funktionen verwendet und die Anzahl der Suchparameter ist beliebig.
Ich frage mich übrigens, ob es möglich ist, die Zeichenformate nur dann zu erzeugen, wenn wirklich etwas entsprechendes gefunden wurde. Z.Z. erhält man ja eine gigantische Liste aus der evtl. nur 4 oder 5 Formate verwendet werden.
Interessant wäre dann noch, wo ich eine Objekt-Referenz zu ID finden kann. Ich würde z.B. gerne die Möglichkeit einbauen, nach Farben zu suchen oder nach dem Attribut "kein Umbruch".
Und noch ein HINWEIS: Ich bin ein absoluter Anfänger, JavaScript betreffend. Ich habe zwar ein paar Tests gemacht, würde aber trotzdem empfehlen, das Ding erstmal auf Testdaten loszulassen.
Grüße
Wolfgang Giersberg