[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Index von character in Eltern-Textobjekt-Sammlungen finden.

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

Index von character in Eltern-Textobjekt-Sammlungen finden.

mdomino
Beiträge gesamt: 76

3. Mär 2016, 05:01
Beitrag # 1 von 5
Bewertung:
(1240 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebe InDesign-Scripter!

Gut möglich, dass ich gerade (zumal zu fortgeschrittener Stunde) auf dem Schlauch stehe und es eventuell ganz einfach ist, aber ich habe gerade folgendes Problem, zu dem ich keine elegante Lösung finde.

Ich habe in einem Script über eine Positionsmessung einen character gefunden, der mir jetzt also als Objekt vorliegt. Wie finde ich jetzt von diesem character seinen Index beispielsweise im übergeordneten Wort heraus?

Ich weiß zwar, dass ich mit
Code
character.words[0] 

an das Wort komme, aber wie komme ich an den Index vom character?

Die einzige Lösung, die mir bis jetzt einfällt ist.

Code
var myWord = myCharacter.words[0]; 

for (var i = 0; i < myWord.characters.length; i += 1) {
if (myWord.characters[i] === myCharacter) {
var myIndex = i;
break;
}
};


Das kann aber doch nicht die beste Lösung sein, das würde ja ewig dauern bei langen Texten (wenn ich die Position in parentStory suche etc.).

Freue mich über bessere Lösungen. :)

Danke und viele Grüße,
md
X

Index von character in Eltern-Textobjekt-Sammlungen finden.

Martin Fischer
  
Beiträge gesamt: 12732

3. Mär 2016, 07:07
Beitrag # 2 von 5
Beitrag ID: #547615
Bewertung:
(1214 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo md,

Du suchst die Position des Zeichens im Wort, in dem es steckt.

Ermittle dazu die Indices des Zeichens selbst und des ersten Zeichens des Worts und bilde die Differenz:
Code
var myIndex = myCharacter.index - myCharacter.words.firstItem().characters.firstItem().index; 


Dies sollte funktionieren, solange keine verborgenen Zeichen (z.B. Index-Marken) stören.

Alternativ könntest Du über ein itemByRange die Zahl der Zeichen im Bereich vom ersten Zeichen des Worts bis zum entsprechenden Zeichen ermitteln:

Code
var myPos = myCharacter.parent.characters.itemByRange(myCharacter.words.firstItem().characters.firstItem().index, myCharacter.index).characters.length 


Ich bin mir jetzt aber nicht sicher, ob hier die Marken nicht auch noch mitgezählt werden. Das müsstest Du mal testen.

Ansonsten könntest Du Dir den contents des itemByRange greifen und die Buchstaben zählen.


als Antwort auf: [#547614]
(Dieser Beitrag wurde von Martin Fischer am 3. Mär 2016, 07:13 geändert)

Index von character in Eltern-Textobjekt-Sammlungen finden.

mdomino
Beiträge gesamt: 76

3. Mär 2016, 15:17
Beitrag # 3 von 5
Beitrag ID: #547634
Bewertung:
(1153 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
vielen Dank für deine Hilfe, das funktioniert einwandfrei.

Ich habe noch eine weitere, damit verbundene Frage:

Wie kann ich, nachdem ich den Index gefunden habe, am effizientesten den Text (also
Code
contents 

) beispielsweise vom Storybeginn bis zum index abrufen, als Ergebnis also einen String erhalten?

Da fällt mir wieder nur ein for-loop zu ein:
Code
var myContents = ""; 

for (var i = 0; i <= myIndex; i += 1) {
myContents += myStory.characters[i].contents;
};


Auch das ist nicht sonderlich effizient. Gibt es da ebenfalls eine elegantere Lösung?

(Ich hatte mit
Code
myStory.characters.itemByRange(ix1, ix2).getElemtents() 

rumgespielt, aber damit gelange ich ja noch nicht an die contents.

Danke und viele Grüße,
md


als Antwort auf: [#547615]

Index von character in Eltern-Textobjekt-Sammlungen finden.

Martin Fischer
  
Beiträge gesamt: 12732

3. Mär 2016, 15:42
Beitrag # 4 von 5
Beitrag ID: #547637
Bewertung:
(1146 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo md,


Du willst ja nicht die einzeln Zeichen in dem Bereich ermitteln, sondern - wie Du schreibst - den content(s).

Versuch's also mit
Code
myStory.characters.itemByRange(ix1,  ix2).contents; 


ix1 dürfte einfach zu bestimmen sein (0 für das erste Zeichen des Textabschnitts).
Das Hauptproblem dürfte damit in der Bestimmung von ix2 bestehen.
Da bist Du nun gefragt, bis wohin der Bereich sich erstrecken soll.


als Antwort auf: [#547634]

Index von character in Eltern-Textobjekt-Sammlungen finden.

mdomino
Beiträge gesamt: 76

3. Mär 2016, 16:19
Beitrag # 5 von 5
Beitrag ID: #547642
Bewertung:
(1126 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Martin,
ah, da habe ich ja einen Schritt zu weit und damit zu kompliziert gedacht. Die Frage, wie ich ix2 ermittle, hattest du mir ja schon oben beantwortet. ;)

Vielen Dank noch einmal für die kompetente und schnelle Hilfe!

Viele Grüße,
md


als Antwort auf: [#547637]
X