[GastForen Programme Print/Bildbearbeitung Adobe InDesign Scripting: bestimmte Zeichen in Hochformat darstellen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Scripting: bestimmte Zeichen in Hochformat darstellen

mike123
Beiträge gesamt: 26

17. Okt 2006, 09:22
Beitrag # 1 von 7
Bewertung:
(2419 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, bin noch neu im InDesign scripten, hab jetzt auch schon ein bisschen rumprobiert, komme aber nicht ganz drauf.
Ich will aus einem beliebigen Zeichen oder Zeichenfolge ein hochgestelltes Zeichen machen.
In meinem Fall sieht das in etwa so aus: {hoch3}, daraus soll ein "³" werden. Vielleicht kann mir da irgendwer ne Anregung geben.

Danke schonmal
X

Scripting: bestimmte Zeichen in Hochformat darstellen

Florian Hardwig
Beiträge gesamt: 51

17. Okt 2006, 12:43
Beitrag # 2 von 7
Beitrag ID: #256947
Bewertung:
(2396 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,

mit Scripting kann ich Dir nicht helfen, aber vielleicht hilft Dir auch diese Lösung:
1. Lege für die Hochzahlen ein Zeichenformat mit entsprechender Hochstellung/Größen-/Strichstärkenanpassung an.
2. Suche die (wie ich es verstanden habe im Text enthaltene) Zeichenfolge hoch3 und ersetze durch 3, mit über "erweiterte Optionen" zugewiesenem Zeichenformat

Alternativ, wenn Du einen Font benutzt, der Extra-Glyphen für Hochzahlen besitzt, kannst Du diese auch direkt ohne den Zeichenformat-Umweg über Suchen/Ersetzen einfügen.


als Antwort auf: [#256869]

Scripting: bestimmte Zeichen in Hochformat darstellen

Martin Fischer
  
Beiträge gesamt: 12732

17. Okt 2006, 13:39
Beitrag # 3 von 7
Beitrag ID: #256959
Bewertung:
(2377 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,

das müßte - in etwa so wie es Mike manuell vorgeschlagen hat - mit dem Skript ReplaceInStringProWithConfig.jsx von zaphodbeeblebroxx funktionieren:

1. Suche-String = {hoch^9} (^9 steht für beliebige Zahl)
2. Suche-String = ^9
Ersetze-Formatierung: Zeichenformat für Hochstellung


als Antwort auf: [#256947]
(Dieser Beitrag wurde von Martin Fischer am 17. Okt 2006, 13:39 geändert)

Scripting: bestimmte Zeichen in Hochformat darstellen

mike123
Beiträge gesamt: 26

18. Okt 2006, 12:11
Beitrag # 4 von 7
Beitrag ID: #257172
Bewertung:
(2341 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Also zunächst mal danke für Eure Hilfestellungen. Ich hab jetzt folgendes zusammengebastelt:
Code
characterStyle("", "", "SuperScript"); 
characterStyle("", "", "SubScript");
function characterStyle(myStart, myEnd, myCharacterStyleName) {

var myCharacterStyle;
var myDoc = app.activeDocument;
noCharStyle = app.activeDocument.characterStyles[0];
//Create the character style if it does not already exist.
myCharacterStyle = myDoc.characterStyles.item(myCharacterStyleName);
try{
myCharacterStyle.name;
}
catch (myError){
myCharacterStyle = myDoc.characterStyles.add({name:myCharacterStyleName});
}
app.findPreferences = app.changePreferences = null;

start=myDoc.search(myStart,false,false, undefined);
stop=myDoc.search(myEnd,false,false, undefined);

// there must be at least one occurence of the code at beginning
// count of code at beginning has to be equal to count of code at the end
if(start.length>0 && start.length == stop.length) {
for ( k=start.length-1 ; k >=0 ; k--) {
switch (myCharacterStyleName){
case "SuperScript": myCharacterStyle.position = Position.superscript; break;
case "SubScript": myCharacterStyle.position = Position.subscript; break;
}

st=start[k].parentStory;
st.characters.itemByRange(start[k].index, stop[k].index+(myEnd.length-1)).appliedCharacterStyle=myCharacterStyle;
}
searchAndReplace(myStart,"");
searchAndReplace(myEnd,"");
}
}


Das funktioniert auch schon ganz gut soweit. Nur wollte ich aus meiner importierten XML-Datei eine Tabelle einfügen und das Script da drüber laufen lassen. Dann geht das aber nicht. Die XML-Tabelle sieht so aus:
Code
<tabelle type="array"> 
<aid:table xmlns:aid="http://ns.adobe.com/AdobeInDesign/3.0/" type="array">
<aid:tr type="array">
<aid:td>Order-No</aid:td>
<aid:td>test1</aid:td>
<aid:td>test2</aid:td>
</aid:tr>
<aid:tr type="array">
<aid:td>123</aid:td>
<aid:td>bla1abc[/abc]</aid:td>
<aid:td>bla2</aid:td>
</aid:tr>
</aid:table>
</tabelle>


Die Fehlermeldung bei Ausführung des Scripts lautet dann:
Zitat JavaScript Fehler!

Fehlernummer: 45
Fehlerzeichenfolge: Object is invalid
Zeile 108
Quelle: st.characters.itemByRange(start[k].index, stop[k].index+(myEnd.length-1)).appliedCharacterStyle=myCharacterStyle;


Jetzt habe ich die Vermustung, dass der Befehl itemByRange vom falschen Ausgangspunkt ausgeht, da es in der Tabelle ist. Kann mir da wer nen Tipp geben. Kann man das irgendwie mit textFrames ansprechen.
Wie gesagt, bin noch neu in der Thematik.


als Antwort auf: [#256959]

Scripting: bestimmte Zeichen in Hochformat darstellen

Martin Fischer
  
Beiträge gesamt: 12732

18. Okt 2006, 14:44
Beitrag # 5 von 7
Beitrag ID: #257230
Bewertung:
(2327 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,

Zitat Jetzt habe ich die Vermustung, dass der Befehl itemByRange vom falschen Ausgangspunkt ausgeht, da es in der Tabelle ist.


Du liegst mit Deiner Vermutung richtig.
Der Fehler liegt in diesen beiden Zeilen:
Code
st=start[k].parentStory;   
st.characters.itemByRange(start[k].index, stop[k].index+(myEnd.length-1)).appliedCharacterStyle=myCharacterStyle;

st ist Deine Story.
Dein itemByRange bezieht sich also auf den Textfluß.
start[k].index bezieht sich, wenn start[k] in einer Tabelle ist, nicht auf den Textfluß, sondern auf die Zelle.

Angenommen Du hast in Zelle 3 der ersten Tabelle im Textfluß nach dem 1. Zeichen ein "". Dann lautet dessen Index 1. Und dann folgt das Kommando: Weise den Buchstaben von Index 1 im Textfluß bis zum Index (stop[k]) das Zeichenformat xy zu.
Du siehst das Problem?
start[k].index liefert Dir die relative Position des gesuchten Strings in der Tabelle.
Aber du nimmst diesen, um die Zeichen ab einer relativen Position zum Textfluß auszuzeichnen.

Ein Workaround:
1. Prüfen ob der Treffer in einer Zelle ist (...parent.constructor.name == "Cell").
2. Wenn nein -> weiter wie bisher.
3. Wenn ja -> Index der Zelle und Index der Tabelle bestimmen und relativ zu diesen die Zeichen ab Pos x bis Pos y mit dem Zeichenformat auszeichnen. Im itemByRange darfst Du Dich dabei also nicht auf die story beziehen, sondern auf die relative Postition innerhalb der Tabelle.

Das ist ziemlich mühsam.

Hast Du es mal mit dem oben angegebenen Skript ReplaceInStringWithConfig.jsx versucht?


als Antwort auf: [#257172]
(Dieser Beitrag wurde von Martin Fischer am 18. Okt 2006, 14:45 geändert)

Scripting: bestimmte Zeichen in Hochformat darstellen

mike123
Beiträge gesamt: 26

18. Okt 2006, 16:22
Beitrag # 6 von 7
Beitrag ID: #257265
Bewertung:
(2313 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habs jetzt geschafft. War gar ned so schwer. Ich hab aus st=start[k].parentStory; einfach st=start[k].parent; gemacht und schon funktionierts.
Es soll ja im kompletten Textfluss geändert werden, daher passts so ja. Ich bin nur noch nicht ganz so firm in den Bezeichnern. Gibts da eigentlich ne anständige Referenz irgendwo?


als Antwort auf: [#257230]

Scripting: bestimmte Zeichen in Hochformat darstellen

Martin Fischer
  
Beiträge gesamt: 12732

18. Okt 2006, 18:37
Beitrag # 7 von 7
Beitrag ID: #257316
Bewertung:
(2301 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> einfach st=start[k].parent; gemacht und schon funktionierts.

Oh, Mann!
Manchmal ist die Lösung so einfach. ;-)


> Gibts da eigentlich ne anständige Referenz irgendwo?

Außer der mitgelieferten Scripting Reference kenne ich nichts.


als Antwort auf: [#257265]
X