3 Replies Latest reply on Jan 8, 2015 6:42 AM by darkkilltec

    Is there some example for creation a TOC for a FM Document?

    darkkilltec Level 1

      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.