[GastForen Programmierung/Entwicklung AppleScript Telefonummern per AppleScript in InDesign CS3/4 spationieren

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Gunray
Beiträge gesamt: 26

4. Feb 2010, 11:06
Beitrag # 1 von 11
Bewertung:
(4449 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

da bin ich mal wieder.
Ich komme leider nicht mehr weiter. Auch hier im Forum habe ich nix passendes gefunden.

Mein Problem:

Ich möchte per Dialogbox eine Telefonnummer eingeben z.B.:
+49(0)511-87451-0

Diese soll dann per in eine Textbox geschrieben werden (das funktioniert schon) und so aus sehen:

+49(0)5 11 - 8 74 51-0

mein Problem ist das die Länge der Telefonnummer variiert und ich nicht weiß wie ich das realisieren soll.

Wie kann ich das machen?

Hier mein Codeschnipsel:

Dialog-Teil:
Code
			tell (make dialog row) 
tell (make dialog column)
make static text with properties {static label:"Name:"}
make static text with properties {static label:"Titel 1:"}
make static text with properties {static label:"Titel 2"}
end tell
tell (make dialog column)
set NameField to make text editbox with properties {edit contents:"Vorname Name", min width:60}
set Titel1Field to make text editbox with properties {edit contents:"+49(0)511-87451-0", min width:60}
set Titel2Field to make text editbox with properties {edit contents:" ", min width:60}
end tell
end tell


und hier das Ausführen:

Code
	tell spread 1 of aDoc to set t to make text frame with properties {geometric bounds:{20, 4, 30, 40}, item layer:aLayer} 
set tc to vkName & return & vkTitel1 & return & vkTitel2
set contents of t to tc
set s to parent story of t
set point size of characters of s to 6
set point size of characters of line 1 of s to 8
set fill color of characters of s to aSwatch
set fill color of line 1 of s to "Black"
set applied font of s to "Baskerville BQ"
set font style of s to "Italic"
set applied font of line 1 of s to "Akzidenz Grotesk"
set font style of line 1 of s to "Bold"


Vielleicht hat ja jemand eine Idee


Mit freundlichen Grüßen

Benjamin Böse

---------------------------
Typostudio Müller GmbH
www.typostudio.de

(Dieser Beitrag wurde von Gunray am 4. Feb 2010, 11:07 geändert)
X

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Hans Haesler
  
Beiträge gesamt: 5826

4. Feb 2010, 15:27
Beitrag # 2 von 11
Beitrag ID: #432734
Bewertung:
(4420 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gunray,

möchtest Du als "Spatium" einen normalen Leerschlag verwenden?
Oder, z.B., ein Achtelgeviert?

Würdest Du bitte ein paar mögliche Telefon-Nummern angeben?

Gruss, Hans


als Antwort auf: [#432687]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Gunray
Beiträge gesamt: 26

4. Feb 2010, 19:15
Beitrag # 3 von 11
Beitrag ID: #432752
Bewertung:
(4391 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

danke für die schnelle Reaktion.

Die Telefonnummern sollen lediglich zweistellig von rechts gegliedert werden mit einem Kerning-Wert von 100.

Mögliches aussehen:

Eingabe => Textfeld

+49(0)3231-23456-23 => +49 (0) 32 31 - 2 34 56 - 23
+49(0)323-2345-231 => +49 (0) 3 23 - 23 45 - 2 31
+49(0)3231-2356-231 => +49 (0) 32 31 - 23 56 - 2 31
+49(0)323-2345-231 => +49 (0) 3 23 - 23 45 - 23

Zudem habe ich jetzt noch ein Problem. Den Code & tab & kann ich ja zwischen texten setzen in:
Code
tell spread 1 of aDoc to set t to make text frame with properties {geometric bounds:{23, 43, 53, 85}, item layer:aLayer} 
set tc to "Hallo" & tab & "Welt"
set contents of t to tc

setzen

Aber wenn ich danach make tab stop with properties {position:9}
eingebe kommt eine Fehlermeldung. Wie kann ich zusäztlich den Tabluator setzen?

Danke für die Hilfe

Benjamin Böse

---------------------------
Typostudio Müller GmbH
www.typostudio.de


als Antwort auf: [#432734]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Hans Haesler
  
Beiträge gesamt: 5826

4. Feb 2010, 23:38
Beitrag # 4 von 11
Beitrag ID: #432759
Bewertung:
(4355 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Benjamin,

bitteschön. Und danke für die weiteren Beispiele.

Aufgrund Deines ersten Beispiels hatte ich eine Lösung vorbereitet, welche fünf Leerschläge einsetzt, dort wo Du sie in Deinem ersten Beitrag getippt hast.

Doch nun sollte an neun Stellen ein Kerning-Wert von 100 Einheiten zugewiesen werden ... Das muss ich auf morgen verschieben.

Zu Deinem tab-stop-Problem. Leider zeigst Du nicht das Umfeld der Codezeile, welcher den Fehler generiert.

So sollte es klappen:

Code
tell parent story of t 
make tab stop with properties {position:9}
end tell

Gruss, Hans


als Antwort auf: [#432752]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

-hans-
Beiträge gesamt: 748

5. Feb 2010, 08:29
Beitrag # 5 von 11
Beitrag ID: #432764
Bewertung:
(4327 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen,
wenn es kein fester Kerningwert sein muss, sondern eventuell ein Leerzeichen zur Gliederung reicht (könnte man wohl auch durch einen festen abstand z.b. achtelgeviert ersetzen), dann funktioniert folgendes:
Code
set meinetelnr to "+49(0)3231-23456-23" 

my telnrgliedern(meinetelnr)

on telnrgliedern(ausgangsstring)
set mylist to every text item of ausgangsstring
set startstring to "+49 (0) "
set nrlist to characters 7 thru -1 of ausgangsstring

--liste umgekehrt sortieren
set nrlist02 to {}
repeat with i from 1 to count of nrlist
set mynr to item i of nrlist
set beginning of nrlist02 to mynr
end repeat

--von ende her paarweise abzaehlen
set nrlist03 to {}
set counter to 0
repeat with j from 1 to count of nrlist02
set mynr02 to item j of nrlist02
try
set mynr02 to mynr02 as number
if counter = 2 then
set mynr02 to mynr02 & " "
set beginning of nrlist03 to mynr02
set counter to 1
else
set beginning of nrlist03 to mynr02
set counter to counter + 1
end if
on error
set mynr02 to " " & mynr02 & " "
set beginning of nrlist03 to mynr02
set counter to 0
end try
end repeat
set telnr to startstring & (nrlist03 as string)
return telnr
end telnrgliedern



als Antwort auf: [#432759]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Hans Haesler
  
Beiträge gesamt: 5826

5. Feb 2010, 09:21
Beitrag # 6 von 11
Beitrag ID: #432767
Bewertung:
(4315 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

eine gute Lösung. Aber ein Leerschlag ist schon etwas viel.

Anstelle der Kerning-Einheiten bevorzuge ich ebenfalls ein Achtelgeviert. So wie es in der folgenden GREP-Lösung eingesetzt wird.

Gruss, Hans


als Antwort auf: [#432764]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Hans Haesler
  
Beiträge gesamt: 5826

5. Feb 2010, 09:25
Beitrag # 7 von 11
Beitrag ID: #432768
Bewertung:
(4312 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Benjamin,

und hier ist das Script in lauffähiger Version.

Es benötigt die Scripting Addition "Satimage.osax". Okay, man könnte die Suchen/Ersetzen-Vorgänge mit InDesigns "grep" durchführen. Werde ich vielleicht später mal versuchen.

Für die Variablen aLayer und aSwatch habe ich irgendetwas definiert (weil keine Angabe).

Anstelle der 100 Kerning-Einheiten wird ein Achtelgeviert eingesetzt. Dieses ist nur unwesentlich breiter. Hat aber zwei Vorteile: Es ist sichtbar. Und bei der Änderung einer Ziffer bleibt es erhalten.

Im Dialog habe ich die Breite der Eingabefelder auf 160 erhöht.

Code
tell application "Adobe InDesign CS3" 
activate
-- eventuell offengebliebene Dialoge schliessen
try
destroy dialogs
end try
-- den Dialog vorbereiten
set aDialog to make dialog with properties {name:"Visitenkarte"}
tell aDialog
tell (make dialog column)
tell (make dialog row)
tell (make dialog column)
make static text with properties {static label:"Name:"}
make static text with properties {static label:"Titel 1:"}
make static text with properties {static label:"Titel 2:"}
end tell
tell (make dialog column)
set NameField to make text editbox with properties {edit contents:"Vorname Name", min width:160}
set Titel1Field to make text editbox with properties {edit contents:"+49(0)511-87451-0", min width:160}
set Titel2Field to make text editbox with properties {edit contents:" ", min width:160}
end tell
end tell
end tell
-- den Dialog zeigen
with timeout of 300 seconds
set dResult to show aDialog
end timeout
-- die Auswahl auswerten
if dResult = true then
set vkName to edit contents of NameField
set vkTitel1 to edit contents of Titel1Field
set vkTitel2 to edit contents of Titel2Field
else
destroy aDialog
error number -128
end if
destroy aDialog
end tell

-- die Textkette dem Handler zum Spationieren schicken
set vkTitel1 to my groupNumbers(vkTitel1)

-- die Suchen/Ersetzen-Vorgaben leeren
set find text preferences to nothing
set change text preferences to nothing
set find change text options to nothing

set aDoc to document 1
set aLayer to layer 1 of document 1
set aSwatch to swatch 6 of document 1
tell spread 1 of aDoc to set t to make text frame with properties {geometric bounds:{20, 4, 30, 40}, item layer:aLayer}
set tc to vkName & return & vkTitel1 & return & vkTitel2
set contents of t to tc
set s to parent story of t

-- die Zeichen definieren ("<2009>" ist der Unicode des Achtelgevierts)
set find what of find text preferences to "¶"
set change to of change text preferences to "<2009>"

-- das Suchen/Ersetzen auslösen
tell s to change text

set point size of characters of s to 6
set point size of characters of line 1 of s to 8
set fill color of characters of s to aSwatch
set fill color of line 1 of s to "Black"
set applied font of s to "Baskerville BQ"
set font style of s to "Italic"
set applied font of line 1 of s to "Akzidenz Grotesk"
set font style of line 1 of s to "Bold"

-- die Suchen/Ersetzen-Vorgaben leeren
set find text preferences to nothing
set change text preferences to nothing
set find change text options to nothing
end tell

-- der Handler, welcher das Spationieren vorbereitet
on groupNumbers(tmpString)
set tmpString to change "(\\(0\\))" into "¶\\1¶" in tmpString with regexp
set tmpString to change "(-)" into "¶\\1¶" in tmpString with regexp
set tmpString to change "¶([0-9])?([0-9][0-9])([0-9][0-9])¶" into "¶\\1¶\\2¶\\3¶" in tmpString with regexp
set tmpString to change "¶([0-9])([0-9][0-9])" into "¶\\1¶\\2" in tmpString with regexp
set tmpString to change "¶+" into "¶" in tmpString with regexp
return tmpString
end groupNumbers

Gruss, Hans


als Antwort auf: [#432767]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Gunray
Beiträge gesamt: 26

5. Feb 2010, 12:48
Beitrag # 8 von 11
Beitrag ID: #432792
Bewertung:
(4274 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke ersteinmal für die nette Hilfe. Momentan habe ich leider viele Fragen, da ich ja erst angefangen habe mit Hilfe von AppleScript viele lästigen Arbeitschritte in InDesign zu vereinfachen.

Das einzige Problem das ich jetzt noch habe, ist dass InDesign sich beim Ausführen immer verabschiedet.

Naja muss ich ersteinmal schauen voran das liegt!


als Antwort auf: [#432687]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Hans Haesler
  
Beiträge gesamt: 5826

5. Feb 2010, 13:20
Beitrag # 9 von 11
Beitrag ID: #432798
Bewertung:
(4261 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Benjamin,

bitteschön.

Also, dass InDesign abstürzt ist nicht angenehm.

Mit welcher Version von InDesign hast Du dieses Problem?
Hast Du überprüft, ob die Definitionen der Variablen (aLayer, aSwatch) mit dem Dokument übereinstimmen?

Falls ja, dann schrittweise vorgehen. Zuerst nur das Erzeugen des Textrahmens zulassen. Und den Rest des Codes auskommentieren.

Dann die Textkette einsetzen lassen. Dann das Suchen/Ersetzen auslösen.

Gruss, Hans


als Antwort auf: [#432792]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

-hans-
Beiträge gesamt: 748

5. Feb 2010, 15:06
Beitrag # 10 von 11
Beitrag ID: #432806
Bewertung:
(4249 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Also das Script von Hans läuft bei mir (auch wenn ich meinen Handler dort einsetze ;-) ) problemlos.
CS4


als Antwort auf: [#432798]

Telefonummern per AppleScript in InDesign CS3/4 spationieren

Gunray
Beiträge gesamt: 26

5. Feb 2010, 19:27
Beitrag # 11 von 11
Beitrag ID: #432817
Bewertung:
(4224 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke euch beiden!

Nach einer Neuinstalation von InDesign CS4 hat jetzt alles funktioniert.

Tausend Dank!


als Antwort auf: [#432806]
X