Unterstützung bei ExtentScript

18 views
Skip to first unread message

Johannes Graubner (Transcom)

unread,
Sep 17, 2020, 5:13:14 PM9/17/20
to frameu...@googlegroups.com

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:

 

  • Den markierten Text auszulesen, mir scheint doc.TextSelection das Problem zu sein:
       var myText = "";
     var  myTextItems, i;
    myTextItems = doc.GetTextForRange(doc.TextSelection, Constants.FTI_String);
        for (i = 0; i < myTextItems.len; i += 1) {
            myText += (myTextItems.sdata);
        }


  • Die Marke direkt vor den markierten Text zu setzen, weil es mir nicht gelingt, den Inhalt der Variable tLoc korrekt zu bestimmen, speziell das Objekt von tLoc:
    var myOffset = doc.TextSelection.beg.offset;
    var myPgfObject = doc.TextSelection.beg.obj
    ;  ==> funktioniert leider nicht
    var myTLoc = new TextLoc(myPgfObject, myOffset);
    var myMarker = doc.NewAnchoredObject(Constants.FO_Marker, myTLoc);

 

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

 

4XScripts

unread,
Sep 18, 2020, 2:06:45 AM9/18/20
to frameu...@googlegroups.com

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®

KlausDaube

unread,
Sep 19, 2020, 6:42:32 AM9/19/20
to frameusers-de
Kleine korrektur: die letzte anweisung sollte lauten
myMarker.MarkerText = myMarkerText;

Einer von den Kläusen...

Johannes Graubner (Transcom)

unread,
Sep 19, 2020, 9:26:49 PM9/19/20
to frameu...@googlegroups.com

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.

Reply all
Reply to author
Forward
0 new messages