Positionierung in strukturierten Dokumenten

[Update:] Sie können die Beispieldatei (FrameMaker + Skript) jetzt auch hier laden.

Die Positionierung in unstrukturierten Dokumenten mit dem Objekt TextLoc ist relativ leicht nachvollziehbar, den eine Cursor-Position besteht dort aus dem Absatz (Object) und dem Abstand vom Beginn des Absatzes (Offset).

In strukturierten Dokumenten ist es oft besser mit den Objekten ElementLoc oder ElementRange zu arbeiten, dort gibt es aber eine Vater-Kind-Beziehung; und wie die Optionen für Parent und Child richtig zu setzen sind, zeigt die folgende Grafik:
 

How to define ElementLoc and ElementRange

Ein Beispiel • An example

In der folgenden Struktur sollen die ersten beiden <para> ans Ende des <body> versetzt werden.

Based on the shown structure the two first <para> elements should be moved to the end of the <body> element.

Beispielstruktur • Exmaple structure

Set lvDoc = ActiveDoc;
Set lvChapter = lvDoc.MainFlowInDoc.HighestLevelElement;

// In most cases you will use better methods to get element objects
Set lvSection = lvChapter.FirstChildElement.NextSiblingElement;
Set lvBody = lvSection.FirstChildElement.NextSiblingElement;

// Task: Select the first two para elements
Set lvPara1 = lvBody.FirstChildElement;
Set lvPara2 = lvPara1.NextSiblingElement;
If (lvPara2.NextSiblingElement)
    Set lvChildAtEndOfRange = lvPara2.NextSiblingElement;
Else
    Set lvChildAtEndOfRange = 0;
EndIf
New ElementRange NewVar(lvElRange)
    Parent(lvBody) Child(lvPara1)
    Parent(lvBody) Child(lvChildAtEndOfRange);
Set ActiveDoc.ElementSelection = lvElRange;
Display 'Here you are';

// Task: Cut and Paste at the end of the container
PushClipboard; 
Cut Text DocObject(lvDoc);

New ElementLoc NewVar(lvElLoc)
    Parent(lvBody) Child(0); // and of
Set ActiveDoc.ElementSelection = lvElLoc;
Display 'Target position';

Paste Text DocObject(lvDoc);
PopClipboard;
Dieser Beitrag wurde unter Lernen veröffentlicht. Setze ein Lesezeichen auf den Permalink.

2 Kommentare zu Positionierung in strukturierten Dokumenten

  1. richard sagt:

    Wenn das jemanden helfen soll, so fehlt der Code für den Elementrange Parent(E2) Child(E3)-Parent(E2)Child(E4). Was nutzt einem die Grafik, ohne den Codebeispiel, denn der ist kompliziert?

  2. Michael Müller-Hillebrand sagt:

    @Richard: Ein ElementRange wird immer aus zwei ElementLoc zusammengesetzt und wie das geht zeigt der Text im grauen Kasten.

    Ein Codebeispiel habe ich ergänzt.

Kommentare sind geschlossen.