AS i InD: kan inte söka efter ^n

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2009-03-17 14:27

Den här sökningen fungerar:
(myFrameContent är alla textramar i myMasterStories i tur och ordning i en repeatloop)

if myFrameContent contains "Redigering:  " then
	set myBylineStatus to true
end if

Men den här fungerar inte:

if myFrameContent contains "Redigering:^n  " then
	set myBylineStatus to true
end if

...trots att denna fungerar:

search myMasterStories for "Redigering:^n  " replacing with "Redigering:^n" & myFullName

Varför går det i det ena läget men inte i det andra?

Jag kan se flera potentiella fel här, men om vi tar det jag ser med säkerhet först så funkar det sista exemplet därför att du där använde InDesigns sökfunktion, i vilken InDesigns s.k. "metatecken" naturligtvis fungerar.

"Contains" är däremot en operator i "ren" AppleScript som titar om en sträng (eller en lista) innehåller delsträngen. AS tolkat metatecknet bokstavligt, dvs. som "^n", inte som en platshållare för fast radbrytning. Motsvarande symbol i AppleScript (och i många andra program) är \n (dvs backslash + n)

När du kompilerar det så kommer det att omvandlas till en fast radbrytning, scriptet kommer därför att se ut såhär

tell application "Adobe InDesign CS2"
	tell document 1
		set myChars to contents of story 1
		if myChars contains "
" then beep 3
	end tell
end tell

Trots att du innan kompilering skrev "if myChars contains "\n" then beep 3

Ett annat möjligt problem kan vara att det du jämför inte innehåller text, kontrollera det i Script Debugger.

  • Medlem
  • 2009-03-18 07:57
Ursprungligen av Richard Rönnbäck:

Jag kan se flera potentiella fel här, men om vi tar det jag ser med säkerhet först så funkar det sista exemplet därför att du där använde InDesigns sökfunktion, i vilken InDesigns s.k. "metatecken" naturligtvis fungerar.

Ah, tänkte inte på att jag var utanför sökfunktionen. Det lirar ändå, men på "fel" premisser.

  • Medlem
  • 2009-09-14 17:48

Jag lyckas inte får mitt Applescript att hitta fasta radbrytningar. Jag letar efter ^n, <0x000A> och <000A> men får inga träffar.
Jag kan heller inte skriva in detta utan att få det i klartext.

Nedanstående fungerar så när som på den fasta radbrytningen i någon av ovanstående former...

tell application "Adobe InDesign CS2"
	set myD to active document
	tell myD
		set myI to parent story of text frames of pages
		repeat with I from 1 to count myI
			set P to paragraph 1 of item I of myI
			if paragraph 1 of item I of myI contains "<000A>@sydsvenskan.se" then
				set contents of paragraph 1 of item I of myI to "red<000A>@trelleborgsallehanda.se"
			end if
		end repeat
	end tell
end tell

Ok, här rör vi oss i ett (möjligtvis) trist gränsland, beroende på vilken version av OS X som du kör det här på.

InDesign använder Unicode, och då kan du i InDesigns funktion använda Unicode-tecken, kodat som t.ex. <000A> men i OS X-versioner äldre än Leopard är AppleScript självt inte Unicode-baserat, vilket innebär att <000A> inte representerar ett Unicode-tecken, utan helt en enkelt sex vanliga ASCII-tecken, vilket gör att du inte kan få matchning.

Om du använder Leopard så ska du istället kopiera det faktiska tecknet från InDesign, eftersom AppleScript där inte behöver gå omvägar via <000A>

Använder du däremot Tiger så måste du använda InDesigns sökfunktion, inte AppleScript-operatorn "contains"

  • Medlem
  • 2009-09-15 09:55

Bummer. Vi har en blandad miljö ett tag till.

Hur ser InD-motsvarigheten till "contains" ut?

en vanlig sökning är automatiskt "contains", precis som i gränssnittet.

1
Bevaka tråden