Return TypeFunction nameArguments
hzEcodehdsExec::Extract(hzChain&,hzHttpEvent*,)

Declared in file: hzDissemino.h
Defined in file : hdsExec.cpp

Function Logic:

0:START 1:m_Input m_Target hzChain::Printf i memcmp 2:memcmp(i,%e:,3) 3:hzChain::Printf 4:Return E_NOTFOUND 5:fldname hzMapS::Exists 6:pE->m_Uploads.Exists(fldname) 7:hf hzChain::Size hzChain::Printf 8:hf.m_mime==HMTYPE_APP_OPEN_DOCX 9:Gunzip zi 10:!zi.eof(); 11:*zi!=(char)60 12:zi== 13:items zi 14:!zi.eof(); 15:*zi==(char)60 16:hzChain::AddByte 17:zi== 18:items 19:hzChain::AddByte 20:*zi==(char)62 21:hzChain::AddByte 22:hzDocXml::Load rc Err2Txt hzChain::Printf 23:rc==E_OK 24:hzDocXml::FindNodes n 25:n 26:pN E items E 27:hzChain::Size hzChain::Printf hzHttpEvent::SetVarChain 28:Return rc

Function body:

hzEcode hdsExec::Extract (hzChain& errorReport, hzHttpEvent* pE)
{
   _hzfunc("hdsExec::Extract") ;
   hzVect<hzXmlNode*>          vx ;
   hzList<hzHttpFile>::Iter    fx ;
   hzDocXml        xdoc ;
   hzHttpFile      hf ;
   hzChain         Z ;
   hzChain         D ;
   hzChain         E ;
   hzChain         T ;
   chIter          zi ;
   hzXmlNode*      pN ;
   const char*     i ;
   hzString        m_Input ;
   hzString        m_Target ;
   hzString        fldname ;
   uint32_t        n ;
   hzEcode         rc ;
   m_Input = m_pApp->m_ExecParams[m_FstParam] ;
   m_Target = m_pApp->m_ExecParams[m_FstParam+1];
   errorReport.Printf("Extracting from %s to %s\n", *m_Input, *m_Target) ;
   i = *m_Input ;
   if (memcmp(i, "%e:", 3))
   {
       errorReport.Printf("Not an identifiable input\n") ;
       return E_NOTFOUND ;
   }
   fldname = i + 3;
   if (pE->m_Uploads.Exists(fldname))
   {
       hf = pE->m_Uploads[fldname] ;
       errorReport.Printf("Found input (fld %s file %s of %d bytes) mime=%d\n", *hf.m_fldname, *hf.m_filename, hf.m_file.Size(), hf.m_mime) ;
       if (hf.m_mime == HMTYPE_APP_OPEN_DOCX)
       {
           Gunzip(Z, hf.m_file) ;
           for (zi = Z ; !zi.eof() ; zi++)
           {
               if (*zi != CHAR_LESS)
                   continue ;
               if (zi == "<w:document")
               {
                   D << "<w:document" ;
                   for (zi += 11;!zi.eof() ; zi++)
                   {
                       if (*zi == CHAR_LESS)
                       {
                           D.AddByte(CHAR_NL) ;
                           if (zi == "</w:document>")
                           {
                               D << "</w:document>\n" ;
                               break ;
                           }
                       }
                       D.AddByte(*zi) ;
                       if (*zi == CHAR_MORE)
                           D.AddByte(CHAR_NL) ;
                   }
                   break ;
               }
           }
           rc = xdoc.Load(D) ;
           errorReport.Printf("%s. XML load status err=%s\n", __func__, Err2Txt(rc)) ;
           if (rc == E_OK)
           {
               xdoc.FindNodes(vx, "w:t") ;
               for (n = 0; n < vx.Count() ; n++)
               {
                   pN = vx[n] ;
                   E += "<p>\n" ;
                   E << pN->m_fixContent ;
                   E += "\n</p>\n" ;
               }
           }
           errorReport.Printf("Setting var %s with chain of %d bytes\n", *m_Target, E.Size()) ;
           pE->SetVarChain(m_Target, E) ;
       }
   }
   return rc ;
}