InDesign Scripting JS-problem

Tråden skapades och har fått 7 svar. Det senaste inlägget skrevs .
1

Sitter med ett par problem med ett script som ska öka graden på varje markerad rad i ett textblock.

Problem 1:
När jag ska öka en rad som bara har ett ord och som inte går att avstava (så jag får 2 rader) så får jag error på raden
if (i==50||myLine.parentTextFrame.overflows)
"Null is not an object"
det verkar som att markeringen försvinner eller nåt. myLine.parentTextFrame.overflows returnerar false tidigare i den loopen.

Problem 2:
Får "Runtime error" på raden
myLine=mySelection.paragraphs.nextItem();
Går det inte att skriva så helt enkelt?

Jag kanske har skrivit det på ett krångligt sätt? Kom gärna med förbättringsidéer.

Tack på förhand
Martin

if (app.windows.length < 1) {
	alert("Öppna ett dokument först.");
	exit();
}
var myDocument = app.activeDocument;
var mySelection = myDocument.selection[0];

if (mySelection!=undefined) {

var myTextFrame = mySelection.parentTextFrame;
		
	if (mySelection=="[object Text]") {

		var myLine=mySelection.paragraphs.firstItem();
		var punkter=20;

		for (x=0; x<=mySelection.paragraphs.length; x++) {
			for (z=0; z<=4; z++) {
				var i=0;
				while (myLine.lines.length==1) {
					myLine.pointSize += punkter;
					i++;
					if (i==50||myLine.parentTextFrame.overflows)
						break;
				}
				i=0;
				punkter=(punkter/2);
				while (myLine.lines.length>1) {
					myLine.pointSize -= punkter;
					i++;
					if (myLine.pointSize==0.1)
						break;
				}
			
			}
			//##### Finjustera #####
			i=0;
			punkter=0.01;
			while (myLine.lines.length==1) {
				myLine.pointSize += punkter;
				i++;
				if (i==100||myLine.parentTextFrame.overflows)
					break;
			}
			myLine.pointSize -= punkter;
		myLine=mySelection.paragraphs.nextItem();
		}
	}
	else {
		alert("Markera en textsnutt först")
	}
}
else {
	alert("Markera nåt först")
}

Jag kan iofs medge att jag inte är riktigt säker på vad du försöker göra. Kan du förklara vad du vill uppnå?

Men jag skulle gissa att det beror på att du måste iterera baklänges därför att din kollektion blir inaktuell när texten flödar om, dvs det som tidigare var rad två kommer inte längre vara det när rad ett flödat om.

Men som sagt förklara gärna vad du vill uppnå

Det jag vill göra är att ta en eller tex tre rader text och öka varje rad till dess maximala grad inom textblockets ramar. så man får en "mariginaljusterad" text. fast inte med hjälp av kerning utan av storleken på texten. Blev det tydligare eller luddigare?

I quark fanns det något kortkommando för att göra det på en rad om jag inte minns fel. Jag tror inte den funktionen finns i indesign (rätta mig gärna om jag har fel). Den ökar alltså teckenstorleken tills hela textblockets bredd är fylld.

Och jag tror inte jag hänger med riktigt hur det ska gå till rent tekniskt att iterera baklänges. Så det får du gärna förklara närmre.

men vilken text skall fylla ut ramen? Är det texten i markeringen? I så fall finns det förvisso bättre sätt.

Eller är det till och med så att det är all text i ramen som ska anpassas?

Eftersom du använder "overflow" så antar jag att det enbart är enkla textblock (dvs icke kopplade textflöden) Är det så?

Japp, bara enkla textblock. Det är den markerade texten som ska anpassas till ramen.

Ungefär så här skulle jag göra

vvar myDocument = app.activeDocument;
var mySelection = myDocument.selection[0];
var myTextFrame = mySelection.parentTextFrame

var punkter=10;
while (myTextFrame.overflows==false) {
	mySelection.pointSize += punkter;
}
myDocument.undo();

var punkter=2;
while (myTextFrame.overflows==false) {
	mySelection.pointSize += punkter;
}
myDocument.undo();

var punkter=0.5;
while (myTextFrame.overflows==false) {
	mySelection.pointSize += punkter;
}
myDocument.undo();

Tänk dock på att while-loopar kan bli oändliga om villkoret inte uppfylls. T.ex. om du markerar en "insertion point". Så mitt tips är att du lägger på någon koll att markeringen är text men inte insertion point

Tack så mycket för hjälpen förresten Richard.

Tänkte att jag skulle dela med mig av det "färdiga" scriptet. Färdigt blir det väl aldrig men jag tror jag kommit ungefär dit jag hade tänkt i alla fall.

1
Bevaka tråden