hilfdirselbst.ch
Facebook Twitter gamper-media
Kai Rübsamen  M  p
Beiträge: 4457
13. Sep 2013, 09:33
Beitrag #1 von 7
Bewertung:
(2147 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Bedingter Text: Reihenfolge Bedingung und Satz


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;


Gruß Kai Rübsamen
_______________________
Top
 
X
drerol74 m
Beiträge: 387
13. Sep 2013, 16:04
Beitrag #2 von 7
Beitrag ID: #517247
Bewertung:
(2101 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Bedingter Text: Reihenfolge Bedingung und Satz


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)
Top
 
Kai Rübsamen  M  p
Beiträge: 4457
13. Sep 2013, 22:41
Beitrag #3 von 7
Beitrag ID: #517254
Bewertung:
(2072 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Bedingter Text: Reihenfolge Bedingung und Satz


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?

Gruß Kai Rübsamen
_______________________
als Antwort auf: [#517247] Top
 
Kai Rübsamen  M  p
Beiträge: 4457
13. Sep 2013, 23:08
Beitrag #4 von 7
Beitrag ID: #517255
Bewertung:
(2061 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Bedingter Text: Reihenfolge Bedingung und Satz


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?

Gruß Kai Rübsamen
_______________________
als Antwort auf: [#517254]
(Dieser Beitrag wurde von Kai Rübsamen am 13. Sep 2013, 23:21 geändert)
Top
 
Kai Rübsamen  M  p
Beiträge: 4457
14. Sep 2013, 00:02
Beitrag #5 von 7
Beitrag ID: #517256
Bewertung:
(2038 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Bedingter Text: Reihenfolge Bedingung und Satz


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)
Top
 
drerol74 m
Beiträge: 387
14. Sep 2013, 12:46
Beitrag #6 von 7
Beitrag ID: #517261
Bewertung:
(1983 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Bedingter Text: Reihenfolge Bedingung und Satz


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] Top
 
Kai Rübsamen  M  p
Beiträge: 4457
15. Sep 2013, 13:01
Beitrag #7 von 7
Beitrag ID: #517278
Bewertung:
(1935 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Bedingter Text: Reihenfolge Bedingung und Satz


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! ;-)

Gruß Kai Rübsamen
_______________________
als Antwort auf: [#517261] Top
 
X