Is there some example for creation a TOC for a FM Document?
I have some ElmScript and want to turn that into an Extendscript, but i have some problems with it.
This is the ElmScript Function.
Sub IHV_Ebene1;
If fslVersionMajor < 3
MsgBox 'Ben'+vsoe+'tigt Framescript Version 3 oder neuer';
LeaveSub;
EndIf
Set PlatformEncodingMode = True;
If ActiveDoc = 0
MsgBox 'Kein aktives Dokument';
LeaveSub;
EndIf
Set gvSrcDoc = ActiveDoc;
GlobalVar gvDocName;
If gvSrcDoc.Name.Count > 0
Set gvDocName = gvSrcDoc.Name;
Else
Set gvDocName = gvSrcDoc.Label;
EndIf
New Book File ('tempXXXX.book') NewVar(gvBookVar);
New BookComponent BookObject (gvBookVar) NewVar(gvBookComp);
Set gvBookComp.BookComponentType = BkNotGeneratable;
Set gvBookComp.Name = gvDocName;
New BookComponent BookObject(gvBookVar) NewVar(gvTocBookComp);
Set gvTocBookComp.BookComponentType = BkToc;
Set gvTocBookComp.Name = gvDocName+'.TOC';
New StringList NewVar(gvExtractList) Value('Ueberschrift 1 Seite BildSeite') Value('Ueberschrift 1') Value('Ueberschrift 1 mehrzeilig BildSeite');
Set gvTocBookComp.ExtractTags = gvExtractList;
Set gvTocBookComp.GenerateInclude = True;
Set gvTocBookComp.InsertLinks = True;
Generate Bookfiles BookObject(gvBookVar) Visible;
Open Document File (gvDocName+'.TOC') NewVar(docobj) ReturnStatus(gvErrorList) Visible;
Open Document File ('O:\Fachanwendungen\Vorlagen\FM9_TOC\ti_toc_ohne2_9.fm') NewVar(QuellDok);
Import Formats DocObject(docobj) FromDocObject (QuellDok) RefPage;
Set ActiveDoc = QuellDok;
Close Document;
Generate Bookfiles BookObject(gvBookVar) Visible;
Close Book BookObject(gvBookVar) IgnoreMods;
Set ActiveDoc = docobj;
Get Object DocObject(docobj) Type(PgfFmt) Name('Inh-Text') NewVar(NeuFormat1);
Set vPgf = docobj.FirstPgfInDoc;
Loop While(vPgf)
If vPgf.Text <> '<$paranum>\t<$paratext>';
If vPgf.Name = 'Ueberschrift 1IVZ'
Set vPgf.Properties = NeuFormat1.Properties;
EndIf
If vPgf.Name = 'Ueberschrift 1 Seite BildSeiteIVZ'
Set vPgf.Properties = NeuFormat1.Properties;
EndIf
If vPgf.Name = 'Ueberschrift 1 mehrzeilig BildSeiteIVZ'
Set vPgf.Properties = NeuFormat1.Properties;
EndIf
EndIf
Set vPgf = vPgf.NextPgfInDoc;
EndLoop
Set vPgf = ActiveDoc;
Set vPgf.TextSelection = vPgf.FirstPgfInMainFlow.TextRange.Begin;
Set vPgf.CurrentPage = vPgf.FirstBodyPageInDoc;
If vPgf.CurrentPgf = 0
MsgBox 'Keine Einfügemarke';
EndIf
Execute FC CsrTop;
Execute FC HighFlowEnd;
Copy Text;
Close Document IgnoreMods;
Set ActiveDoc = gvSrcDoc ;
Set vPgf = ActiveDoc;
Set vPgf.TextSelection = vPgf.FirstPgfInMainFlow.TextRange.Begin;
Set vPgf.CurrentPage = vPgf.FirstBodyPageInDoc;
If vPgf.CurrentPgf = 0
MsgBox 'Keine Einfügemarke';
EndIf
set vPgf = ActiveDoc.FirstPgfInDoc;
Loop While(vPgf.Name<>'Inh-Ueberschrift')
//Display vPgf.Name;
Set vPgf = vPgf.NextPgfInDoc;
EndLoop
//Display 'Text: '+vPgf.Text;
Execute Fc CsrTop;
Execute Fc CsrNextBop;
Execute Fc CsrNextBop;
Paste Text;
//MsgBox 'Inhaltverzeichnis generiert'
EndSub
And This is what i came up with so far:
function IHV_Ebene1()
{
var srcDoc = app.ActiveDoc;
var docName;
if(srcDoc.Name != "")
{
docName = srcDoc.Name;
}
else
{
docName = srcDoc.Label;
}
var gvBookVar = app.NewNamedBook("tempXXXX.book");
var gvBookComp = gvBookVar.NewSeriesBookComponent(0);
gvBookComp.BookComponentType = Constants.FV_BK_NOT_GENERATABLE;
gvBookComp.Name = docName;
var gvTocBookComp = gvBookVar.NewSeriesBookComponent(0);
gvTocBookComp.BookComponentType = Constants.FV_BK_TOC;
gvTocBookComp.Name = docName+".TOC";
var gvExtractList = ["Ueberschrift 1 Seite BildSeite", "Ueberschrift 1", "Ueberschrift 1 mehrzeilig BildSeite"];
gvTocBookComp.ExtractTags = gvExtractList;
gvTocBookComp.GenerateInclude = true;
gvTocBookComp.InsertLinks = true;
gvBookVar.SimpleGenerate (false, true);
var docObj = OpenFile(docName + ".TOC", true, true, false, true);
var QuellDok = OpenFile("O:\\Fachanwendungen\\Vorlagen\\FM9_TOC\\ti_toc_ohne2_9.fm", true, true, false, true);
docObj.SimpleImportFormats(QuellDok, Constants.FF_UFF_REFPAGE);
app.ActiveDoc = QuellDok;
app.ActiveDoc.Close(Constants.FF_CLOSE_MODIFIED);
gvBookVar.SimpleGenerate (false, true);
gvBookVar.Close(Constants.FF_CLOSE_MODIFIED);
app.ActiveDoc = docObj;
var NeuFormat1 = docObj.GetNamedPgfFmt ("Inh-Text");
var newProps = NeuFormat1.GetProps();
var mainflow = docObj.MainFlowInDoc;
var tframe = mainflow.FirstTextFrameInFlow;
var vPgf = tframe.FirstPgf;
while(vPgf.ObjectValid())
{
if (vPgf.GetText(Constants.FTI_String) != "<$paranum>\t<$paratext>")
{
if (vPgf.Name == "Ueberschrift 1IVZ")
{
vPgf.SetProps (newProps) ;
}
if (vPgf.Name == "Ueberschrift 1 Seite BildSeiteIVZ")
{
vPgf.SetProps (newProps) ;
}
if (vPgf.Name == "Ueberschrift 1 mehrzeilig BildSeiteIVZ")
{
vPgf.SetProps (newProps) ;
}
}
vPgf = vPgf.NextPgfInDoc;
}
var oPgf = docObj.MainFlowInDoc.FirstTextFrameInFlow.FirstPgf;
var oTLoc1 = new TextLoc ( oPgf, 0 );
var oTLoc2 = new TextLoc ( oPgf, Constants.FV_OBJ_END_OFFSET );
var oTRange = new TextRange ( oTLoc1, oTLoc2 );
app.ActiveDoc.TextSelection =oTRange;
app.ActiveDoc.CurrentPage = app.ActiveDoc.FirstBodyPageInDoc;
// If vPgf.CurrentPgf = 0
// MsgBox 'Keine Einfügemarke';
// EndIf
Fcodes([FCodes.CSR_TOP, FCodes.HIGH_FLOW_END]);
app.ActiveDoc.Copy(Constants.FF_COPY_TO_CLIP);
docObj.Close(Constants.FF_CLOSE_MODIFIED);
app.ActiveDoc = srcDoc ;
var tRange1= new TextRange();
tRange1.beg.obj = app.ActiveDoc.MainFlowInDoc.FirstTextFrameInFlow.FirstPgf;
tRange1.beg.offset = 0;
tRange1.end.obj = app.ActiveDoc.MainFlowInDoc.FirstTextFrameInFlow.FirstPgf;
tRange1.end.offset = Constants.FV_OBJ_END_OFFSET;
app.ActiveDoc.TextSelection =tRange1;
app.ActiveDoc.CurrentPage = app.ActiveDoc.FirstBodyPageInDoc;
// If vPgf.CurrentPgf = 0
// MsgBox 'Keine Einfügemarke';
// EndIf
mainflow = app.ActiveDoc.MainFlowInDoc;
tframe = mainflow.FirstTextFrameInFlow;
vPgf = tframe.FirstPgf;
while(vPgf.Name != "Inh-Ueberschrift")
{
vPgf = vPgf.NextPgfInDoc;
}
Fcodes([FCodes.CSR_TOP, FCodes.CSR_NEXT_BOP, FCodes.CSR_NEXT_BOP]);
app.ActiveDoc.Paste(Constants.FF_PASTE_CLIP_TEXT);
if(DEBUG) alert("IHV_Ebene1");
}
Right now it runs without any error messages. But i don´t get the TOC as wanted. It´s inserting some empty space.
I can see it opening an book and the new TOC File with importing refpage. Then i see him selecting the first row of the TOC File(which is empty btw..?!? ) and trying to paste it.
