[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Fehler durch Zuweisen der properties eines Zeichens?!

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

Fehler durch Zuweisen der properties eines Zeichens?!

Kai Rübsamen
Beiträge gesamt: 4662

14. Aug 2016, 14:54
Beitrag # 1 von 9
Bewertung:
(1938 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo!

Mir ist leider kein sinnvollerer Beitragstitel eingefallen.

Ich erhalte Dokumente, wo nur lokal, also komplett ohne Formate gearbeitet wurde. Jetzt ist wichtig, dass ein Return auch die Formatierung des vorherigen Zeichens hat.

Beispiel: Das vorherige Zeichen ist rot, der Return ist schwarz. D.h. ich müsste jetzt den Return finden und die Zeichenfarbe rot zuweisen.

Da ich aber nicht weis, ob die Farbe, die Schrift, die Schriftgröße … abweicht, dachte ich, ich könnte global die properties der beiden Zeichen vergleichen und bei ungleich die properties vom ersten Zeichen dem zweiten Zeichen zuweisen.

Da zu den properties auch der 'contents' gehört, speichere ich den vorher und weise den nachträglich zu.

Problem:
Das erste Zeichen ist z.B. Futura, rot, 16 pt. Mein Skript macht daraus
Minion Pro, schwarz, 12 pt.

Ich dachte zunächst, es würde an der fehlenden Schrift auf meinem Computer liegen. Mit Myriad Pro geht es allerdings auch nicht.

Hat Jemand eine Idee für etwas, dass funktioniert?

Code
app.findGrepPreferences = app.changeGrepPreferences = null; 
app.findGrepPreferences.findWhat = ".\\r";
var allFounds = app.activeDocument.findGrep();

for (var i = 0; i < allFounds.length; i++) {
var curFound = allFounds[i];
var first = curFound.characters[0];
var sec = curFound.characters[1];
var secContents = sec.contents;
if (first.properties != sec.properties) {
sec.properties = first.properties;
sec.contents = secContents;
}
}


Edit: Ich merke gerade, dass first.properties nie sec.properties entspricht, da ja zumindest 'contents' immer anders ist. D.h. die if-Anweisung wird immer ausgeführt :(

Gruß Kai Rübsamen

(Dieser Beitrag wurde von Kai Rübsamen am 14. Aug 2016, 14:58 geändert)
X

Fehler durch Zuweisen der properties eines Zeichens?!

mdomino
Beiträge gesamt: 76

15. Aug 2016, 08:46
Beitrag # 2 von 9
Beitrag ID: #551942
Bewertung:
(1864 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai!
Also, wenn ich dein Problem richtig verstanden habe, kannst du das auch einfach über zwei GREP-Suchen lösen:

Zuerst suchst du nach dem letzten Zeichen vor dem Umbruch:

Code
.(?=\r) 


und ersetzt dieses durch sich selbst und einen neuen Umbruch:

Code
$0\r 


Dieser neue Umbruch hat dann das Format des Zeichens.
Dann musst du nur noch in einer weiteren GREP-Suche doppelte Umbrüche durch einzelne ersetzen, dann wird der zweite (falsch formatierte) Umbruch entfernt und nur der neue richtig formatierte bleibt.

Vielleicht hilft das weiter?

Grüße, md


als Antwort auf: [#551941]

Fehler durch Zuweisen der properties eines Zeichens?!

Martin Fischer
  
Beiträge gesamt: 12440

15. Aug 2016, 08:53
Beitrag # 3 von 9
Beitrag ID: #551943
Bewertung:
(1863 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,

zwei Lösungsvorschläge:


1. quick & dirty;

Suche (via GREP) das letzte Zeichen eines Absatzes kombiniert mit der Absatzschaltung (Return): "(.)\r".
Ersetze die Fundstelle durch das letzte Zeichen und einem Return: "$1\r"
(Möglicherweise funktioniert auch eifnach "$0").

Bei diesem Vorgang sollten alle ersetzten Zeichen die (typographischen) Eigenschaften des ersten Zeichens erhalten.


2. Vergleich der Eigenschaften:
In einer Funktion könntest Du die properties von zwei Objekten (hier zwei Zeichen) miteinander vergleichen.
Bestimmte properties wie id, index, parent, parentTextFrames, properties ... (auch möglicherweise störende wie tabList, bulletChar, numberingRestartPolicies ...) könntest Du über ein Filter-Objekt beim Vergleich herausfiltern.

Oder Du erzeugst eine Positivliste mit den gewünschten zu vergleichenden Eigenschaften.

Bei Unterschieden in den Werten der verglichenen Eigenschaften zwischen dem letzten Zeichen und dem Return weist Du der entsprechenden Eigenschaft des Return den Wert des letzte Zeichens zu.


edit:
=====
mdomino hat - während ich noch am Formulieren war - einen ähnlichen Vorschlag wie meine quick&dirty-Lösung per GREP beigetragen.

Viele Grüße
Martin




als Antwort auf: [#551941]
(Dieser Beitrag wurde von Martin Fischer am 15. Aug 2016, 08:55 geändert)

Fehler durch Zuweisen der properties eines Zeichens?!

Uwe Laubender
Beiträge gesamt: 4888

15. Aug 2016, 09:47
Beitrag # 4 von 9
Beitrag ID: #551944
Bewertung:
(1812 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,
auch wenn Du eine Skriptlösung für Dein Problem findest, wie möchtest Du sicherstellen, dass das vorletzte Zeichen maßgeblich für die Formatierung des gesamten Absatzes ist?

Eine Lösung könnte sein, das Zeichen vor dem Absatzzeichen zu duplizieren und ein Absatzzeichen als Wert für contents zuzuweisen. Danach das alte Absatzzeichen löschen.

Hier dieser Vorschlag als Code:

Code
app.findGrepPreferences = app.changeGrepPreferences = null;  
app.findGrepPreferences.findWhat = ".\\r";
var allFounds = app.activeDocument.findGrep();

for(var n=0; n<allFounds.length; n++)
{
var curFound = allFounds[n];
var first = curFound.characters[0];
var sec = curFound.characters[1];
var indexSec = sec.index;
var story = first.parent;

first.duplicate(LocationOptions.AFTER , first);
story.characters[indexSec].contents = "\r";
story.characters[indexSec+1].remove();
};


//EDIT: Geht natürlich auch ohne die Variable paragraph. Die habe ich nun gestrichen und das Zeichen über den Index der Story angesteuert.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#551941]
(Dieser Beitrag wurde von Uwe Laubender am 15. Aug 2016, 09:59 geändert)

Fehler durch Zuweisen der properties eines Zeichens?!

Kai Rübsamen
Beiträge gesamt: 4662

15. Aug 2016, 10:18
Beitrag # 5 von 9
Beitrag ID: #551945
Bewertung:
(1791 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo md und Martin,

danke für eure Beiträge:

md: das funktioniert

Martin: Deine Quick & Dirty-Lösung funktioniert nicht. Ich nehme an, weil die Anzahl der Zeichen nicht verändert wird.

Gruß Kai Rübsamen


als Antwort auf: [#551943]

Fehler durch Zuweisen der properties eines Zeichens?!

Martin Fischer
  
Beiträge gesamt: 12440

15. Aug 2016, 10:42
Beitrag # 6 von 9
Beitrag ID: #551946
Bewertung:
(1772 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Kai Rübsamen ] Martin: Deine Quick & Dirty-Lösung funktioniert nicht. Ich nehme an, weil die Anzahl der Zeichen nicht verändert wird.


Ja, ein Denkfehler.

Viele Grüße
Martin




als Antwort auf: [#551945]

Fehler durch Zuweisen der properties eines Zeichens?!

Uwe Laubender
Beiträge gesamt: 4888

15. Aug 2016, 10:53
Beitrag # 7 von 9
Beitrag ID: #551947
Bewertung:
(1760 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Kai,
hast Du mal meine Lösung weiter oben getestet?

Die sollte funktionieren.

Und ist insofern sauber, da im Anschluß nach keinen doppelten Absatzzeichen gesucht werden und diese ersetzt werden müssen wie bei der GREP-Lösung von mdomino. Doppelte Absatzzeichen können ja auch mal gewollt sein.
*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#551945]

Fehler durch Zuweisen der properties eines Zeichens?!

Uwe Laubender
Beiträge gesamt: 4888

15. Aug 2016, 11:13
Beitrag # 8 von 9
Beitrag ID: #551948
Bewertung:
(1734 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Kai und ich haben uns gerade über mein Snippet off-Forum ausgetauscht.

Das Ergebnis will ich mal reinstellen. Es benutzt den zweiten InsertionPoint des ersten Characters und weist diesem ein Absatzzeichen zu. So spart man sich den duplicate()-Befehl:

Code
app.findGrepPreferences = app.changeGrepPreferences = null;  
app.findGrepPreferences.findWhat = ".\\r";
var allFounds = app.activeDocument.findGrep();

for(var n=0; n<allFounds.length; n++)
{
var curFound = allFounds[n];
var first = curFound.characters[0];
var sec = curFound.characters[1];
var indexSec = sec.index;
var story = first.parent;

// ÄNDERUNG:
first.insertionPoints[1].contents = "\r";
story.characters[indexSec+1].remove();
};

*****
Mit herzlichem Gruß,
Uwe Laubender


als Antwort auf: [#551947]

Fehler durch Zuweisen der properties eines Zeichens?!

Kai Rübsamen
Beiträge gesamt: 4662

15. Aug 2016, 12:07
Beitrag # 9 von 9
Beitrag ID: #551949
Bewertung:
(1689 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Bekanntlich erfährt man die Wahrheit immer häppchenweise …

Ich suche nicht nur ein Zeichen vor einem Return, sondern auch einen falsch formatierten Return vor dem Return. In dem Fall hat der insertionPoint nicht funktioniert und Uwe und ich haben beschlossen, dass der duplicate()-Befehl doch die richtige Wahl war:

Code
var curDoc = app.activeDocument; 

checkReturns(".\\r", "\r");
checkReturns("\\r{2}", "\r");

function checkReturns(f, insert) {

app.findGrepPreferences.findWhat = f;
var allFounds = app.activeDocument.findGrep();

for (var n = 0; n<allFounds.length; n++) {
var curFound = allFounds[n];
curFound.select();
var first = curFound.characters[0];
var sec = curFound.characters[1];
var indexSec = sec.index;
var story = first.parent;

first.duplicate(LocationOptions.AFTER , first);
story.characters[indexSec].contents = insert;
story.characters[indexSec+1].remove();
}
}


Erklärung: Durch …insertionPoints[-1] stehe ich im Fall vom Return bereits im nächsten Absatz und nehme mit contents auch die Formatierung von diesem auf. Das ist bei duplicate() nicht der Fall.

Warum habe ich jetzt die Variante von Uwe und nicht die einfachere von md genommen? Weil bei Uwes Variante gleich der falsche Return gelöscht wird und ich so nicht nachträglich zwischen einem "guten" und einem "bösen" zweiten Return unterscheiden muss.

Danke an alle fürs Mitdenken :)

Gruß Kai Rübsamen


als Antwort auf: [#551948]
(Dieser Beitrag wurde von Kai Rübsamen am 15. Aug 2016, 12:13 geändert)
X

Aktuell

PDF / Print
kalenderFebruar_kl

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
05.03.2021 - 30.04.2021

Digicomp Academy AG, Zürich oder virtuell
Freitag, 05. März 2021, 13.00 Uhr - Freitag, 30. Apr. 2021, 17.00 Uhr

Lehrgang

Im berufsbegleitenden Web Publisher Lehrgang vertiefen Sie Ihr Wissen rund um das Thema Screendesign und die Umsetzung von Websites. Wir befähigen Sie dazu selbständig und professionell Ihren Webauftritt zu planen und in die Realität umzusetzen.

Preis: CHF 3'250.–
Dauer: 8.5 Tage - Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PWEB