Hallo an die Programmierer in dieser Runde,
für FrameMaker brauche ich ein Script, das den (nach einer Suche) aktuell markierten Text ausliest und (neben anderem Text) in eine Marke direkt vor dem markierten Text schreibt. Prinzipiell steht das Script, aber an 2 Problemen scheitere ich bislang:
Kann mir jemand auf die Sprünge helfen? Gegebenenfalls auch gegen Rechnung?
Viele Grüße
Johannes Graubner
Transcom. Ing.-Büro Johannes Graubner
Büro für technische Kommunikation
mailto:grau...@transcom.de Tel. 03641-620540 / 0179-66 55 215
http://www.transcom.de Fax 03641-620541
Burgweg 7, 07749 Jena, Germany
Hallo Johannes,
Dein Code funktioniert, bis auf eine
Kleinigkeit:
ersetze
myText += (myTextItems.sdata);
mit
myText
+= (myTextItems[i].sdata);
Deine
Marke wird auch eingefügt,Du kannst sie im Dokument zwar sehen,
aber nicht im Marken-Pod. Der Marken-Pod wird anscheinend
nicht aktualisiert.
Das hat bei mir erst nach dem neu Laden des Dokumentes
angezeigt.
Ich
habe Deinen Code noch etwas erweitert in der Hoffnung,
künftige Probleme zu umgehen:
var oDoc = app.ActiveDoc;
var myText = "";
var myMarkerName = "TestMarker";
var myMarkerText = "Meine neue Marke";
if (oDoc.ObjectValid() )
{
myText = TextAuslesen();
MarkeSetzen()
}
else
{
alert("Kein aktives Dokument");
}
function TextAuslesen()
{
var myTextItems, i;
var sText = "";
myTextItems = oDoc.GetTextForRange(oDoc.TextSelection,
Constants.FTI_String);
for (i = 0; i < myTextItems.length; i += 1)
{
sText += myTextItems[i].sdata;
}
return sText;
}
function MarkeSetzen()
{
var oPgf = oDoc.TextSelection.beg.obj // Absatz, in dem
sich der Cursor befindet
// Jetzt abprüfen, ob der Cursor auserhalb des Dokumentes
ist:
if (oPgf.ObjectValid() ==0)
{
alert ("Keine Einfügemarke gefunden. Marker kann nicht
gesetzt werden");
return;
}
var myOffset = oDoc.TextSelection.beg.offset;
var myPgfObject = oDoc.TextSelection.beg.obj; // ==>
funktioniert leider nicht
var myTLoc = new TextLoc(myPgfObject, myOffset);
var myMarker = oDoc.NewAnchoredObject(Constants.FO_Marker,
myTLoc);
/*
// Alternative
var myMarker = oDoc.NewAnchoredMarker (myTLoc);
*/
var myMarkerType = oDoc.GetNamedMarkerType
(myMarkerName);
if (myMarkerType.ObjectValid () == 0)
{
myMarkerType = oDoc.NewNamedMarkerType
(myMarkerName);
}
myMarker.MarkerTypeId = myMarkerType;
myMarker.MarkerText = myMarkerName;
}
--
Für Nachrichten an den »Eigentümer« der Gruppe, senden Sie eine E-Mail an frameuser...@googlegroups.com
---
Sie erhalten diese Nachricht, weil Sie in Google Groups E-Mails von der Gruppe "frameusers-de" abonniert haben.
Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an frameusers-d...@googlegroups.com.
Wenn Sie diese Diskussion im Web verfolgen möchten, rufen Sie https://groups.google.com/d/msgid/frameusers-de/001001d68d37%24594414c0%240bcc3e40%24%40transcom.de auf.
-- Klaus Göbel (Entwicklung) __________________________ 4XScripts - Ute Mitschke Leitenäcker 2 D-82211 Herrsching Tel.: +49 8152 9279209 +49 173 9439973 Mail: devel...@4XScripts.com https://4XScripts.com → 4XScripts → Effektive Add-Ons für Adobe® FrameMaker®
Hallo Klaus,
danke, für Deine Unterstützung.
> myText += (myTextItems[i].sdata);
Natürlich, ohne Index machte die Schleife keinen Sinn.
> var myMarker = oDoc.NewAnchoredObject(Constants.FO_Marker, myTLoc);
> /* Alternative
> var myMarker = oDoc.NewAnchoredMarker (myTLoc);
> */
Die “Alternative” war die Lösung. Der Befehl NewAnchoredObject produziert bei mir in FM 14 und FM 16 weiterhin keine Textmarken, sie werden auch nicht magisch sichtbar nach Speichern | Schließen | Öffnen des Dokuments. FrameMaker erkennt offensichtlich schon beim Einsprung in die den Befehl enthaltende function (), dass es diesen Befehl nicht mag und arbeitet von der Function keine Befehle ab.
Danke auch für Deine Ergänzungen. Die Prüfung, ob Dokument aktiv, fand bereits an anderer Stelle im Code statt, aber die Prüfung auf Cursorposition und Markertyp habe ich gern aufgenommen.
(Deinen Schreibfehler bezüglich „
myMarker.MarkerText = myMarkerText;“ hatte ich schon erkannt, bevor er mir Probleme bereitete – für alle anderen unten in Deinem Text bereits korrigiert.)
Viele Grüße
Johannes
myMarker.MarkerText = myMarkerText;}
Wenn Sie diese Diskussion im Web verfolgen möchten, rufen Sie https://groups.google.com/d/msgid/frameusers-de/0a153b42-79cb-e82d-9827-2d40ed40ed0b%404xscripts.com auf.