[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Bedingter Text: Reihenfolge Bedingung und Satz

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

Bedingter Text: Reihenfolge Bedingung und Satz

Kai Rübsamen
Beiträge gesamt: 4684

13. Sep 2013, 09:33
Beitrag # 1 von 7
Bewertung:
(3493 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Ich möchte eine Bedingung erstellen und diese dann einem Satz zuweisen. Momentan verhält es sich so, dass die Bedingung anscheinend im Satz [Ohne] erzeugt wird und dann offenbar auch dem Satz "EPUB" zugewiesen wird?!

Wenn ich jetzt zuerst den Satz erzeuge, wird meine Bedingung trotzdem auch in [Ohne] abgelegt.

Frage:
Wie erreiche ich, dass eine Bedingung nur in einem bestimmten Satz, aber nicht in [Ohne] auftaucht?

Ich hab aus dem OMV so gelesen, dass mit
iP.applyConditions([pagemap], true); eine vorh. Bedingung entfernt wird, viell. ist das aber auch etwas anderes? Man kann übrigens auch beim Erzeugen einer Bedingung properties mitgeben, offenbar aber keinen Satz?!

Danke.

Code
var curDoc = app.activeDocument; 
var allPages = curDoc.pages

var curPage, iP;

var q = curDoc.textPreferences.typographersQuotes;
curDoc.textPreferences.typographersQuotes = false;

// prüfen, ob die Bedingung schon vorhanden ist
if (!curDoc.conditions.itemByName("EPUB-Anker").isValid) {
var pagemap = curDoc.conditions.add();

}
else {
var pagemap = curDoc.conditions.itemByName("EPUB-Anker");
}

with (pagemap) {
name = "EPUB-Anker";
indicatorColor = UIColors.red;
visible=true;
indicatorMethod = ConditionIndicatorMethod.useHighlight;
}

var curCondSet = curDoc.conditionSets.add();
curCondSet.name = "EPUB";
curCondSet.setConditions = [[pagemap, true]];


for (var i=allPages.length-1; i >= 0; i--) {
curPage = allPages[i];
iP = curPage.textFrames[0].words[0].insertionPoints[0];
iP.contents = '<a id="page_'+curPage.name+'"></a>';
iP.applyConditions([pagemap], true);
}

curDoc.conditionalTextPreferences.activeConditionSet = curCondSet;

curDoc.textPreferences.typographersQuotes = q;

X

Bedingter Text: Reihenfolge Bedingung und Satz

drerol74
Beiträge gesamt: 507

13. Sep 2013, 16:04
Beitrag # 2 von 7
Beitrag ID: #517247
Bewertung:
(3447 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

so wie ich das sehe, zählt »Ohne« nicht als Bedingungssatz und so kann dem auch keine Bedingung zugeordnet/weggenommen werden. Test: conditionSets.length

Eine condition hat auch keine Eigenschaft "conditionSet", sondern umgekehrt: conditionSet hat als Eigenschaft ein Array mit der Sichtbarkeit der vorhandenen Bedingungen. Ergo kann man einer Bedingung bei deren Erzeugung keinen Bedingungssatz mitgeben.

Vielleicht hilft dir dieser Schnipsel weiter: Damit ist im »EPUB-SAtz« nur eine Bedingung sichtbar. (Abfangen müsste man noch, ob schon etwas (Bedingung, Satz) vorhanden ist und eventuell vorhandene Sätze neu definieren)

Code
var _epubConditionSet = app.activeDocument.conditionSets.add({name: "EPUB"}) 

app.activeDocument.conditionalTextPreferences.activeConditionSet = _epubConditionSet;

var _myConditions = app.activeDocument.conditions;

for(var c=0;c<_myConditions.length;c++) {
_myConditions[c].visible = false;
}

app.activeDocument.conditions.add({name: "myCondition", visible: true});

_epubConditionSet.redefine();


Und wenn du einen Bedingungssatz benötigst, in dem keine Bedingung angezeigt wird, musst du wohl oder übel einen eigenen Satz anlegen, bei dem alle Bedingungen ausgeblendet sind.

Mit applyConditions kannst du einer Textstelle eine Bedingung zuordnen. Mit dem zweiten Parameter wird festgelegt, ob eine eventuell im Text vorhandene Bedingung entfernt wird.

Schöne Grüße
Roland


als Antwort auf: [#517213]
(Dieser Beitrag wurde von drerol74 am 13. Sep 2013, 16:09 geändert)

Bedingter Text: Reihenfolge Bedingung und Satz

Kai Rübsamen
Beiträge gesamt: 4684

13. Sep 2013, 22:41
Beitrag # 3 von 7
Beitrag ID: #517254
Bewertung:
(3418 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Roland,

danke für deinen Beitrag. Der Code war wohl eher als Schnipsel gedacht? Die Zeile mit dem Ausblenden macht ja nichts, da nur eine Bedingung nach der Schleife erzeugt wird.

Ansonsten kann ich deine Beobachtungen jetzt bestätigen. Wenn bei [Ohne] alles eingeblendet ist, müsste man wohl – wie von dir vorgeschlagen – einen Satz Print machen, dort alles ausblenden und den als aktiven Satz definieren. So wie es aussieht, hat eine Bedingung zu einem Satz zunächst kein Bezug, bzw. eine Bedingung ist erstmal in allen Sätzen?

Wenn eine Bedingung zunächst in allen Sätzen ist, verstehe ich nicht, wann epubCondSet.setConditions = [[pagemap, true]]; notwendig ist? Nur, um mit false etwas auszublenden und ich muss das für jeden Satz angeben? So wie es aussieht, erreichst du mit deinem redefine dasselbe?

Hier mal mein aktueller Stand; viell. noch etwas holprig. Zum Test ein Dokument mit z.B. 4 Seiten mit verketteten Textrahmen und Platzhaltertext.

Code
// das aktive Dokument 
var curDoc = app.activeDocument;
// alle Seiten im Dokument
var allPages = curDoc.pages;
var setNames = ["EPUB", "Print"];
var condNames = ["Anker"];

// prüfen, ob der Satz schon vorhanden ist
if (!curDoc.conditionSets.itemByName(setNames[0]).isValid)
var epubCondSet = curDoc.conditionSets.add({name: setNames[0]});
else var epubCondSet = curDoc.conditionSets.itemByName(setNames[0]);

// prüfen, ob der Satz schon vorhanden ist
if (!curDoc.conditionSets.itemByName(setNames[1]).isValid)
var printCondSet = curDoc.conditionSets.add({name: setNames[1]});
else var printCondSet = curDoc.conditionSets.itemByName(setNames[1]);

// prüfen, ob die Bedingung schon vorhanden ist
if (!curDoc.conditions.itemByName(condNames[0]).isValid)
var pagemap = curDoc.conditions.add({name: condNames[0]});
else var pagemap = curDoc.conditions.itemByName(condNames[0]);

// der Bedingung eine Farbe geben
with (pagemap) {
indicatorColor = UIColors.red;
indicatorMethod = ConditionIndicatorMethod.useHighlight;
}

// die Bedingung im jeweiligen Satz an oder aus
epubCondSet.setConditions = [[pagemap, true]];
printCondSet.setConditions = [[pagemap, false]];

// der aktive Satz
curDoc.conditionalTextPreferences.activeConditionSet = epubCondSet;

// einige Variablen
var curPage, iP;

// in den Voreinstelllungen Typografische Anführungszeichen aus
var q = curDoc.textPreferences.typographersQuotes;
curDoc.textPreferences.typographersQuotes = false;

// Anker einfügen
for (var i=allPages.length-1; i >= 0; i--) {
curPage = allPages[i];
iP = curPage.textFrames[0].words[0].insertionPoints[0];
iP.contents = '<a id="page_'+curPage.name+'"></a>';
iP.applyConditions([pagemap], true);
}

// // in den Voreinstelllungen Typografische Anführungszeichen wieder an
curDoc.textPreferences.typographersQuotes = q;


Ich frage mich, ob man in diesem Zusammenhang das Prüfen ob etwas da ist, noch vereinfachen könnte?


als Antwort auf: [#517247]

Bedingter Text: Reihenfolge Bedingung und Satz

Kai Rübsamen
Beiträge gesamt: 4684

13. Sep 2013, 23:08
Beitrag # 4 von 7
Beitrag ID: #517255
Bewertung:
(3407 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Ich frage mich, ob man in diesem Zusammenhang das Prüfen ob etwas da ist, noch vereinfachen könnte?


Offenbar geht auch folgendes:

Code
var curDoc = app.documents[0]; 

// prüfen, ob die restlichen Sätze bereits vorhanden sind
var epubCondSet = getSet ("EPUB");
var printCondSet = getSet ("Print");

function getSet (str){
if (!curDoc.conditionSets.item(str).isValid) {
curDoc.conditionSets.add({name: str});
}
return curDoc.conditionSets.item(str);
}


Hier verstehe ich allerdings nicht, warum curDoc innerhalb der Funktion schon bekannt ist und nicht extra übergeben werden muss?


als Antwort auf: [#517254]
(Dieser Beitrag wurde von Kai Rübsamen am 13. Sep 2013, 23:21 geändert)

Bedingter Text: Reihenfolge Bedingung und Satz

Kai Rübsamen
Beiträge gesamt: 4684

14. Sep 2013, 00:02
Beitrag # 5 von 7
Beitrag ID: #517256
Bewertung:
(3384 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Gut, es ist Freitag u. ich lerne offensichtlich skripten ;-)

Antwort auf: Hier verstehe ich allerdings nicht, warum curDoc innerhalb der Funktion schon bekannt ist und nicht extra übergeben werden muss?

Weil curDoc eine globale Variable ist und daher innerhalb der Funktion bekannt ist.

Viele der erfahrenen Skripter mögen ja das ESTK nicht. Mir hat es gerade sehr geholfen, da ich während der Laufzeit im Datenbrowser überprüfen kann, was in der Funktion ankommt. Hier sehe ich den String, der übergeben wird, aber auch curDoc.

Anders verhält es sich, wenn curDoc innerhalb einer Funktion main() liegen würde. Hier wäre curDoc in der Funktion getSet() unbekannt und müsste übergeben werden. Auch das kann man prima mit und ohne Übergabewert im Datenbrowser prüfen.

So, jetzt hoffe ich, dass meine Erklärung richtig war und viell. einem anderen Anfänger auch etwas nützt ;-)

n8


als Antwort auf: [#517255]
(Dieser Beitrag wurde von Kai Rübsamen am 14. Sep 2013, 00:04 geändert)

Bedingter Text: Reihenfolge Bedingung und Satz

drerol74
Beiträge gesamt: 507

14. Sep 2013, 12:46
Beitrag # 6 von 7
Beitrag ID: #517261
Bewertung:
(3329 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Der Code war wohl eher als Schnipsel gedacht? Die Zeile mit dem Ausblenden macht ja nichts, da nur eine Bedingung nach der Schleife erzeugt wird.


Es könnten ja noch weitere Bedingungen vorhanden sein ;) Ja, das war nur ein Beispiel, da ich deine Daten ja nicht kenne.


Antwort auf: So wie es aussieht, hat eine Bedingung zu einem Satz zunächst kein Bezug, bzw. eine Bedingung ist erstmal in allen Sätzen?


Nach der Generierung einer neuen Bedingung musst du alle Sätze nochmal neu definieren. Die wissen zu dem Zeitpunkt noch nicht, wie sie mit der neuen Bedingung umgehen sollen - aus- oder einblenden? Einsichtiger wird es – glaub ich – wenn man alles im UI vorher einmal kurz durchspielt.


Antwort auf: So wie es aussieht, erreichst du mit deinem redefine dasselbe?


Das ist lediglich eine andere Herangehensweise, man muss das aber auch für alle Sätze durchführen. Kommt auf die Ausgangssituation an, was geschickter ist.

Schöne Grüße
Roland


als Antwort auf: [#517256]

Bedingter Text: Reihenfolge Bedingung und Satz

Kai Rübsamen
Beiträge gesamt: 4684

15. Sep 2013, 13:01
Beitrag # 7 von 7
Beitrag ID: #517278
Bewertung:
(3281 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: Einsichtiger wird es – glaub ich – wenn man alles im UI vorher einmal kurz durchspielt.

Hab ich gemacht. Danke. Im UI empfinde ich das genauso umständlich! ;-)


als Antwort auf: [#517261]
X