richter     01/11/15 04:09:03

  Modified:    .        Tag: Embperl2c Embperl.pm embperl.h ep2.h epmain.c
                        epprovider.c
               Embperl  Tag: Embperl2c Recipe.pm
               Embperl/Recipe Tag: Embperl2c Embperl.pm
               driver   Tag: Embperl2c epxalan.cpp
  Log:
  Embperl 2 - recipe updates
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.118.4.59 +2 -1      embperl/Embperl.pm
  
  Index: Embperl.pm
  ===================================================================
  RCS file: /home/cvs/embperl/Embperl.pm,v
  retrieving revision 1.118.4.58
  retrieving revision 1.118.4.59
  diff -u -r1.118.4.58 -r1.118.4.59
  --- Embperl.pm        2001/11/08 13:14:02     1.118.4.58
  +++ Embperl.pm        2001/11/15 12:09:02     1.118.4.59
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: Embperl.pm,v 1.118.4.58 2001/11/08 13:14:02 richter Exp $
  +#   $Id: Embperl.pm,v 1.118.4.59 2001/11/15 12:09:02 richter Exp $
   #
   ###################################################################################
   
  @@ -26,6 +26,7 @@
   
   ##ep2## 
   use HTML::Embperl::Syntax ;
  +use HTML::Embperl::Recipe ;
   ##/ep2## 
   
   use strict ;
  
  
  
  1.19.4.14 +3 -2      embperl/embperl.h
  
  Index: embperl.h
  ===================================================================
  RCS file: /home/cvs/embperl/embperl.h,v
  retrieving revision 1.19.4.13
  retrieving revision 1.19.4.14
  diff -u -r1.19.4.13 -r1.19.4.14
  --- embperl.h 2001/11/07 15:21:59     1.19.4.13
  +++ embperl.h 2001/11/15 12:09:02     1.19.4.14
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: embperl.h,v 1.19.4.13 2001/11/07 15:21:59 richter Exp $
  +#   $Id: embperl.h,v 1.19.4.14 2001/11/15 12:09:02 richter Exp $
   #
   
###################################################################################*/
   
  @@ -81,7 +81,8 @@
       rcUnknownProvider,
       rcXalanError,
       rcMissingParam,
  -    rcNotCodeRef
  +    rcNotCodeRef,
  +    rcUnknownRecipe
       } ;
   
   
  
  
  
  1.1.2.22  +20 -2     embperl/Attic/ep2.h
  
  Index: ep2.h
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/ep2.h,v
  retrieving revision 1.1.2.21
  retrieving revision 1.1.2.22
  diff -u -r1.1.2.21 -r1.1.2.22
  --- ep2.h     2001/11/10 15:21:28     1.1.2.21
  +++ ep2.h     2001/11/15 12:09:02     1.1.2.22
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: ep2.h,v 1.1.2.21 2001/11/10 15:21:28 richter Exp $
  +#   $Id: ep2.h,v 1.1.2.22 2001/11/15 12:09:02 richter Exp $
   #
   
###################################################################################*/
   
  @@ -259,7 +259,25 @@
   
   int Provider_Init (void) ;
   
  -
  +int Provider_New            (/*in*/ req *              r,
  +                             /*in*/ size_t             nSize,
  +                             /*in*/ tCacheItem *       pItem,
  +                             /*in*/ tProviderClass *   pProviderClass,
  +                             /*in*/ HV *               pParam) ;
  +
  +int Provider_NewDependOne   (/*in*/ req *              r,
  +                             /*in*/ size_t             nSize,
  +                             /*in*/ const char *       sSourceName,
  +                             /*in*/ tCacheItem *       pItem,
  +                             /*in*/ tProviderClass *   pProviderClass,
  +                             /*in*/ HV *               pParam) ;
  +
  +int Provider_AddDependOne   (/*in*/ req *              r,
  +                             /*in*/ tProvider *        pProvider,
  +                             /*in*/ const char *       sSourceName,
  +                             /*in*/ tCacheItem *       pItem,
  +                             /*in*/ tProviderClass *   pProviderClass,
  +                             /*in*/ HV *               pParam) ;
   
   
   
  
  
  
  1.75.4.69 +22 -10    embperl/epmain.c
  
  Index: epmain.c
  ===================================================================
  RCS file: /home/cvs/embperl/epmain.c,v
  retrieving revision 1.75.4.68
  retrieving revision 1.75.4.69
  diff -u -r1.75.4.68 -r1.75.4.69
  --- epmain.c  2001/11/15 08:32:52     1.75.4.68
  +++ epmain.c  2001/11/15 12:09:02     1.75.4.69
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: epmain.c,v 1.75.4.68 2001/11/15 08:32:52 richter Exp $
  +#   $Id: epmain.c,v 1.75.4.69 2001/11/15 12:09:02 richter Exp $
   #
   
###################################################################################*/
   
  @@ -155,6 +155,7 @@
        case rcXalanError:              msg ="[%d]ERR:  %d: %s Xalan Error: %s: %s" ; 
break ; 
           case rcMissingParam:         msg ="[%d]ERR:  %d: %s Missing Parameter %s 
%s" ; break ; 
           case rcNotCodeRef:           msg ="[%d]ERR:  %d: %s %s need coderef in 
'%s'" ; break ; 
  +        case rcUnknownRecipe:                msg ="[%d]ERR:  %d: %s Unknown recipe 
'%s'" ; break ; 
   
        default:                        msg ="[%d]ERR:  %d: %s Error %s%s" ; break ; 
           }
  @@ -3366,6 +3367,7 @@
       {
       int rc ;
       
  +
       r -> Buf.pSourcelinePos = r -> Buf.pCurrPos = r -> Buf.pBuf ;
       r -> Buf.pEndPos  = r -> Buf.pBuf + nFileSize ;
   
  @@ -3408,12 +3410,22 @@
           int i ;
           char * s ;
           SV * c ;
  +        SV * pRecipe ;
  +        STRLEN l ;
  +        int num ;
   
  -#if 0        
  -        if ((pRecipe = GetHashValueSV (pRP, "recipe")))
  -         {
  -         PUSHMARK(sp);
  -         XPUSHs(sv_2mortal(newRV_inc(pRP))); 
  +        dSP ;
  +
  +     if (GetHashValueSV (pRP, "provider"))
  +            pParam = r -> pConf -> pReqParameter ;
  +        else 
  +            {
  +            if (!(pRecipe = GetHashValueSV (pRP, "recipe")))
  +                pRecipe = sv_2mortal(newSVpv ("Embperl", 7)) ;
  +
  +            PUSHMARK(sp);
  +         XPUSHs(r -> pReqSV); 
  +         XPUSHs(sv_2mortal(newRV_inc((SV *)pRP))); 
            XPUSHs(pRecipe);                
            PUTBACK;                        
            num = perl_call_pv ("HTML::Embperl::Recipe::GetRecipe", G_SCALAR /*| 
G_EVAL*/) ;
  @@ -3422,14 +3434,13 @@
            if (num == 1)
                pParamRV = POPs ;
            PUTBACK;
  -         if (num != 1 || !SvROK (pParamRV) || !(pParam = SvRV(pParamRV)) || 
SvTYPE(pParam) != SVt_PVHV)
  +         if (num != 1 || !SvROK (pParamRV) || !(pParam = (HV *)SvRV(pParamRV)) || 
SvTYPE((SV *)pParam) != SVt_PVHV)
                {
                strncpy (r -> errdat1, SvPV(pRecipe, l), sizeof (r -> errdat1) - 1) ;
  -             return rcUnknowRecipe ;
  +             return rcUnknownRecipe ;
                }
            }
  -     else
  -#endif
  +#if 0
        if (GetHashValueSV (pRP, "provider"))
               pParam = r -> pConf -> pReqParameter ;
           else
  @@ -3503,6 +3514,7 @@
   
           if (r -> pImportStash)
               pParam = (HV *)SvRV(pImportParam) ;
  +#endif
   
   
           if (SvTYPE(pParam) != SVt_PVHV)
  
  
  
  1.1.2.11  +136 -15   embperl/Attic/epprovider.c
  
  Index: epprovider.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epprovider.c,v
  retrieving revision 1.1.2.10
  retrieving revision 1.1.2.11
  diff -u -r1.1.2.10 -r1.1.2.11
  --- epprovider.c      2001/11/14 09:30:30     1.1.2.10
  +++ epprovider.c      2001/11/15 12:09:02     1.1.2.11
  @@ -9,7 +9,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: epprovider.c,v 1.1.2.10 2001/11/14 09:30:30 richter Exp $
  +#   $Id: epprovider.c,v 1.1.2.11 2001/11/15 12:09:02 richter Exp $
   #
   
###################################################################################*/
   
  @@ -83,11 +83,11 @@
   
   /* ------------------------------------------------------------------------ */
   /*                                                                          */
  -/* Provider_NewDependOne                                                 */
  +/* Provider_AddDependOne                                                 */
   /*                                                                          */
   /*! 
   *   \_en
  -*   Creates a provider which depends on another provider. If only a string
  +*   Adds another dependency provider to a new provider. If only a string
   *   is given for the dependend provider the fMatch functions of the
   *   provider classes are called until a provider class is found.  
   *
  @@ -105,7 +105,7 @@
   *   \endif                                                                       
   *
   *   \_de                                                                        
  -*   Erzeugt einen neuen Provider der von einem anderem Provider abh�ngt.
  +*   F�gt einen neuen Abh�nigkeit f�r einen neuen Provider.
   *   Wird nur eine Zeichenkette als Abh�nigkeit �bergeben, werden der Reihe
   *   nach die fMatch Funktionen der Providerklassen aufgerufen, bis eine
   *   passende Klasse gefunden wurde.
  @@ -126,8 +126,8 @@
   *                                                                          
   * ------------------------------------------------------------------------ */
   
  -int Provider_NewDependOne   (/*in*/ req *              r,
  -                             /*in*/ size_t             nSize,
  +int Provider_AddDependOne   (/*in*/ req *              r,
  +                             /*in*/ tProvider *        pProvider,
                                /*in*/ const char *       sSourceName,
                                /*in*/ tCacheItem *       pItem,
                                /*in*/ tProviderClass *   pProviderClass,
  @@ -138,12 +138,9 @@
       int          rc ;
       HV *         pSourceParam ;
       char *       sSource ;
  -    tProvider *  pProvider ;
  +    
       tCacheItem * pSubCache  ;
       
  -    if ((rc = Provider_New (r, nSize, pItem, pProviderClass, pParam)) != ok)
  -        return rc ;
  -
       GetHashValueStrOrHash (pParam, sSourceName, &sSource, &pSourceParam) ;
   
       if (sSource)
  @@ -176,7 +173,72 @@
       return ok ;
       }
   
  +/* ------------------------------------------------------------------------ */
  +/*                                                                          */
  +/* Provider_NewDependOne                                                 */
  +/*                                                                          */
  +/*! 
  +*   \_en
  +*   Creates a provider which depends on another provider. If only a string
  +*   is given for the dependend provider the fMatch functions of the
  +*   provider classes are called until a provider class is found.  
  +*
  +*   @note   This function should not be called directly, but from another
  +*           ProviderXXX_New function
  +*   
  +*   @param  r               Embperl request record
  +*   @param  nSize           Size of provider struct
  +*   @param  sSourceName     Name of the element in pParam that holds the source
  +*   @param  pItem           CacheItem which holds the output of the provider
  +*   @param  pProviderClass  Provider class record
  +*                               source      Sourcetext provider
  +*   @param  pParam          Parameter Hash
  +*   @return                 error code
  +*   \endif                                                                       
  +*
  +*   \_de                                                                        
  +*   Erzeugt einen neuen Provider der von einem anderem Provider abh�ngt.
  +*   Wird nur eine Zeichenkette als Abh�nigkeit �bergeben, werden der Reihe
  +*   nach die fMatch Funktionen der Providerklassen aufgerufen, bis eine
  +*   passende Klasse gefunden wurde.
  +*
  +*   @note   Diese Funktion sollte nicht direkt aufgerufen werden, sondern
  +*           von einer anderen ProviderXXX_New Funktion aus
  +*  
  +*   @param  r               Embperl request record
  +*   @param  nSize           Gr��er der provider struct
  +*   @param  sSourceName     Name des Elements in pParam welches die Quelle enth�lt
  +*   @param  pItem           CacheItem welches die Ausgabe des Providers 
  +*                           speichert
  +*   @param  pProviderClass  Provider class record
  +*   @param  pParam          Parameter Hash
  +*                               source      Quellentext provider
  +*   @return                 Fehlercode
  +*   \endif                                                                       
  +*                                                                          
  +* ------------------------------------------------------------------------ */
  +
  +int Provider_NewDependOne   (/*in*/ req *              r,
  +                             /*in*/ size_t             nSize,
  +                             /*in*/ const char *       sSourceName,
  +                             /*in*/ tCacheItem *       pItem,
  +                             /*in*/ tProviderClass *   pProviderClass,
  +                             /*in*/ HV *               pParam)
  +
  +
  +    {
  +    int          rc ;
  +    
  +    if ((rc = Provider_New (r, nSize, pItem, pProviderClass, pParam)) != ok)
  +        return rc ;
   
  +    if ((rc = Provider_AddDependOne (r, pItem -> pProvider, sSourceName, pItem, 
pProviderClass, pParam)) != ok)
  +        return rc ;
  +
  +    return ok ;
  +    }
  +
  +
   
   
   /* ------------------------------------------------------------------------ */
  @@ -232,13 +294,29 @@
       {
       int          rc ;
       tProviderFile * pNew  ;
  +    const char * sFilename  ;
  +    const char * sFn = NULL ;
       
       if ((rc = Provider_New (r, sizeof(tProviderFile), pItem, pProviderClass, 
pParam)) != ok)
           return rc ;
   
       pNew = (tProviderFile *)pItem -> pProvider ;
  +
  +    sFilename = GetHashValueStr  (pParam, "filename", "") ;
  +    if ((r -> bOptions & optDisableChdir) == 0)
  +        {
  +        sFn = strrchr (sFilename, '/') ;
  +#ifdef WIN32
  +        if (!sFn)
  +            sFn = strrchr (sFilename, '\\') ;
  +#endif
  +        }
  +    if (sFn)
  +        sFn++ ;
  +    else
  +        sFn = sFilename ;
   
  -    pNew -> sFilename                   = GetHashValueStrDup  (pParam, "filename", 
NULL) ;
  +    pNew -> sFilename                   = strdup (sFn) ;
       pItem -> sExpiresFilename           = strdup (pNew -> sFilename) ;
   
       return ok ;
  @@ -285,6 +363,7 @@
                                      /*i/o*/ SV *              pKey)
       {
       const char * sFilename = GetHashValueStr  (pParam, "filename", "") ;
  +    const char * sFn = NULL ;
       const char * sDir = "" ;
   
       /* is it a relative filename? -> append path */
  @@ -297,10 +376,23 @@
   #endif                  
           ))            
           {
  +       if ((r -> bOptions & optDisableChdir) == 0)
  +            {
  +            sFn = strrchr (sFilename, '/') ;
  +#ifdef WIN32
  +            if (!sFn)
  +                sFn = strrchr (sFilename, '\\') ;
  +#endif
  +            }
           sDir = r -> sCWD ;
           }
       
  -    sv_catpvf (pKey, "*file:%s%s%s", sDir, *sDir?"/":"", sFilename) ;
  +    if (sFn)
  +        sFn++ ;
  +    else
  +        sFn = sFilename ;
  +
  +    sv_catpvf (pKey, "*file:%s%s%s", sDir, *sDir?"/":"", sFn) ;
       return ok ;
       }
   
  @@ -423,6 +515,7 @@
       {
       int          rc ;
       tProviderMem * pNew  ;
  +    SV           * pSrc ;
       
       if ((rc = Provider_New (r, sizeof(tProviderMem), pItem, pProviderClass, 
pParam)) != ok)
           return rc ;
  @@ -430,9 +523,16 @@
       pNew = (tProviderMem *)pItem -> pProvider ;
   
       pNew -> sName                   = GetHashValueStrDup    (pParam, "name", NULL) ;
  -    pNew -> pSource                 = GetHashValueSVinc     (pParam, "source", 
NULL) ;
       pNew -> nLastModified           = GetHashValueUInt       (pParam, "mtime", 0) ;
   
  +    pSrc = GetHashValueSV     (pParam, "source") ;
  +    if (!pSrc)
  +        pNew -> pSource = NULL ;
  +    else if (SvROK(pSrc))
  +        pNew -> pSource = SvREFCNT_inc (SvRV(pSrc)) ;
  +    else
  +        pNew -> pSource = SvREFCNT_inc (pSrc) ;
  +
       lprintf (r, "mem_new provider=%x source=%x\n", pNew, pNew -> pSource) ;
       return ok ;
       }
  @@ -518,12 +618,21 @@
                                      /*in*/ tProvider *        pProvider,
                                      /*in*/ HV *               pParam)
       {
  +    SV           * pSrc ;
  +
       if (((tProviderMem *)pProvider) -> pSource)
           SvREFCNT_dec (((tProviderMem *)pProvider) -> pSource) ;
   
  -    ((tProviderMem *)pProvider) -> pSource                 = GetHashValueSVinc  
(pParam, "source", NULL) ;
       ((tProviderMem *)pProvider) -> nLastModified           = GetHashValueUInt    
(pParam, "mtime", 0) ;
       
  +    pSrc = GetHashValueSV     (pParam, "source") ;
  +    if (!pSrc)
  +        ((tProviderMem *)pProvider) -> pSource = NULL ;
  +    else if (SvROK(pSrc))
  +        ((tProviderMem *)pProvider) -> pSource = SvREFCNT_inc (SvRV(pSrc)) ;
  +    else
  +        ((tProviderMem *)pProvider) -> pSource = SvREFCNT_inc (pSrc) ;
  +
       return ok ;
       }
   
  @@ -1579,12 +1688,24 @@
       STRLEN  len ;
       tIndex  xSrcDomTree ;
       tCacheItem * pSrcCache ;
  +    SV * pOut ;
  +    char * pBuf ;
  +
   
       pSrcCache = Cache_GetDependency(r, pProvider -> pCache, 0) ;
       if ((rc = Cache_GetContentIndex (r, pSrcCache, &xSrcDomTree)) != ok)
           return rc ;
           
  -    mydie ("Not implemented yet") ;
  +    pOut = newSV (1) ;
  +    len = GetContentLength (r) + 1 ;
  +    
  +    SvGROW (pOut, len) ;
  +    pBuf = SvPVX (pOut) ;
  +    oCommitToMem (r, NULL, pBuf) ;
  +    oRollbackOutput (r, NULL) ;
  +    SvCUR_set (pOut, len - 1) ;
  +
  +    *pData = pOut ;
   
       return ok ;
       }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.4   +9 -9      embperl/Embperl/Attic/Recipe.pm
  
  Index: Recipe.pm
  ===================================================================
  RCS file: /home/cvs/embperl/Embperl/Attic/Recipe.pm,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- Recipe.pm 2001/11/14 15:01:42     1.1.2.3
  +++ Recipe.pm 2001/11/15 12:09:03     1.1.2.4
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: Recipe.pm,v 1.1.2.3 2001/11/14 15:01:42 richter Exp $
  +#   $Id: Recipe.pm,v 1.1.2.4 2001/11/15 12:09:03 richter Exp $
   #
   ###################################################################################
    
  @@ -32,18 +32,18 @@
   sub GetRecipe
   
       {
  -    my ($param, $name) = @_ ;
  +    my ($r, $param, $name) = @_ ;
   
       my @names = split (/\s/, $name) ;
  -    
  -no strict ;
  -    foreach $recipe (@names)
  +    @names = ('Embperl') if (!@names) ;
  +
  +    foreach my $recipe (@names)
           {
           my $mod ;
           if (!($mod = $Recipes{$recipe})) 
               {
               my $mod = ($name =~ /::/)?$recipe:'HTML::Embperl::Recipe::'. $recipe ;
  -            if (!defined (&{$mod . '::new}))
  +            if (!defined (&{$mod . '::new'}))
                   {
                   eval "require $mod" ;
                   if ($@) 
  @@ -52,13 +52,11 @@
                       return undef ;
                       }
                   }
  -            }
   
  -            my $obj = $mod -> new ($recipe, $param) ;
  +            my $obj = $mod -> new ($r, $recipe, $param) ;
               return $obj if ($obj) ;
               }
           }
  -use strict ;
           
       return undef ;                
       }
  @@ -80,3 +78,5 @@
       return HTML::Embperl::Execute ({recipe => $self}) ;
       }
   
  +
  +1;
  \ No newline at end of file
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.2   +38 -23    embperl/Embperl/Recipe/Attic/Embperl.pm
  
  Index: Embperl.pm
  ===================================================================
  RCS file: /home/cvs/embperl/Embperl/Recipe/Attic/Embperl.pm,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- Embperl.pm        2001/11/14 15:01:42     1.1.2.1
  +++ Embperl.pm        2001/11/15 12:09:03     1.1.2.2
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: Embperl.pm,v 1.1.2.1 2001/11/14 15:01:42 richter Exp $
  +#   $Id: Embperl.pm,v 1.1.2.2 2001/11/15 12:09:03 richter Exp $
   #
   ###################################################################################
    
  @@ -19,8 +19,9 @@
   package HTML::Embperl::Recipe::Embperl ;
   
   use strict ;
  -use vars qw{@ISA @EXPORT_OK %EXPORT_TAGS} ;
  +use vars qw{@ISA} ;
   
  +@ISA = ('HTML::Embperl::Recipe') ;
   
   # ---------------------------------------------------------------------------------
   #
  @@ -32,9 +33,12 @@
   sub new
   
       {
  -    my ($class, $recipe, $param) = @_ ;
  +    my ($class, $r, $recipe, $param) = @_ ;
   
  +    my $self ;
       my $src ;
  +    my $file = $param -> {inputfile} ;
  +    $file = $r -> Sourcefile if (!$file || $file eq '*') ;
   
       if (ref $param -> {input})
           {
  @@ -51,45 +55,56 @@
           $src = 
               {
               'type'      =>  'file',
  -            'filename'  => $param -> {inputfile},
  -            'cache',    => 0,
  +            'filename'  => $file,
  +            'cache'     => 0,
               } ;
           }
   
  -    my $self =
  +    my $import =
           {
  -        'provider', =>
  +        'provider' => 
               {
  -            'type' => 'eprun',
  +            'type' => 'epcompile',
               'source' => 
                   {
  +                'cache', => 0,
                   'provider' => 
                       {
  -                    'type' => 'epcompile',
  +                    'type' => 'epparse',
  +                    'syntax' => $param -> {'syntax'} || 'Embperl',
                       'source' => 
                           {
  -                        'cache', => 0,
  -                        'provider' => 
  -                            {
  -                            'type' => 'epparse',
  -                            'syntax' => $param -> {'syntax'} || 'Embperl',
  -                            'source' => 
  -                                {
  -                                'cache' => 0,
  -                                'provider' =>  $src,
  -                                }
  -                            }
  +                        'cache' => 0,
  +                        'provider' =>  $src,
                           }
                       }
                   }
               }
           } ;
   
  -    foreach (qw{expires_in expires_func expires_filename})
  +    if (!exists $param -> {'import'})
           {
  -        $self -> {$_} = $param -> {$_} if (exists $param -> {$_}) ;
  +        my $run =
  +            {
  +            'provider' =>
  +                {
  +                'type' => 'eprun',
  +                'source' => $import 
  +                }
  +            } ;                
  +
  +
  +        foreach (qw{expires_in expires_func expires_filename cache_key 
cache_key_options cache_key_func})
  +            {
  +            $run -> {$_} = $param -> {$_} if (exists $param -> {$_}) ;
  +            }
  +        $run -> {'cache'} = $run -> {expires_in} || $run -> {expires_func} || $run 
-> {expires_filename}?1:0 ;
  +        $self = $run ;
  +        }
  +    else
  +        {
  +        $self = $import ;
           }
  -    $self -> {'cache'} = 0 ;
   
       return $self ;
       }
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.10  +291 -67   embperl/driver/Attic/epxalan.cpp
  
  Index: epxalan.cpp
  ===================================================================
  RCS file: /home/cvs/embperl/driver/Attic/epxalan.cpp,v
  retrieving revision 1.1.2.9
  retrieving revision 1.1.2.10
  diff -u -r1.1.2.9 -r1.1.2.10
  --- epxalan.cpp       2001/11/08 16:42:25     1.1.2.9
  +++ epxalan.cpp       2001/11/15 12:09:03     1.1.2.10
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: epxalan.cpp,v 1.1.2.9 2001/11/08 16:42:25 richter Exp $
  +#   $Id: epxalan.cpp,v 1.1.2.10 2001/11/15 12:09:03 richter Exp $
   #
   
###################################################################################*/
   
  @@ -92,7 +92,7 @@
   *                                                                          
   * ------------------------------------------------------------------------ */
   
  -int ProviderXalanXSL_New (/*in*/ req *              r,
  +static int ProviderXalanXSL_New (/*in*/ req *              r,
                             /*in*/ tCacheItem *       pItem,
                             /*in*/ tProviderClass *   pProviderClass,
                             /*in*/ HV *               pParam)
  @@ -100,51 +100,9 @@
   
       {
       int                 rc ;
  -    HV *                pStylesheetParam ;
  -    char *              sStylesheet ;
  -    tProviderXalanXSL * pNew = (tProviderXalanXSL *)cache_malloc (r, 
sizeof(tProviderXalanXSL)) ;
       
  -    if (!pNew)
  -        return rcOutOfMemory ;
  -
  -    memset (pNew, 0, sizeof (*pNew)) ;
  -
  -    pNew -> Provider.pCache             = pItem ;
  -    pNew -> Provider.pProviderClass     = pProviderClass ;
  -    pNew -> Provider.sOutputType        = pProviderClass -> sOutputType ;
  -    
  -    GetHashValueStrOrHash (pParam, "stylesheet", &sStylesheet, &pStylesheetParam) ;
  -
  -    tCacheItem * pFileCache  ;
  -    if (sStylesheet)
  -        {
  -        pStylesheetParam = (HV *)SvRV(sv_2mortal (CreateHashRef (
  -            "provider", hashtsv, CreateHashRef (
  -                "type", hashtstr, "file",
  -                "filename", hashtstr, sStylesheet,
  -                NULL),
  -            "cache", hashtint, 0,
  -            NULL))) ;
  -        }
  -
  -    if (pStylesheetParam)
  -        {
  -        if ((rc = Cache_New (r, pStylesheetParam, &pFileCache)) != ok)
  -            return rc ;
  -
  -        if ((rc = Cache_AddDependency (r, pItem, pFileCache)) != ok)
  -            return rc ;
  -    
  -        }
  -    else
  -        {
  -        strcpy (r -> errdat1, "Xalan-XSL") ;
  -        strcpy (r -> errdat2, "stylesheet") ;
  -        return rcMissingParam ;
  -        }
  -
  -
  -    pItem -> pProvider = (tProvider *)pNew ;
  +    if ((rc = Provider_NewDependOne (r, sizeof(tProviderXalanXSL), "stylesheet", 
pItem, pProviderClass, pParam)) != ok)
  +        return rc ;
   
       return ok ;
       }
  @@ -191,7 +149,7 @@
       if ((rc = Cache_AppendKey (r, pParam, "stylesheet", pKey)) != ok)
           return rc;
   
  -    sv_catpv (pKey, "*xalan-cxsl") ;
  +    sv_catpv (pKey, "*xalan-compile-xsl") ;
       return ok ;
       }
   
  @@ -225,7 +183,7 @@
   
   
   
  -int ProviderXalanXSL_GetContentPtr     (/*in*/ req *            r,
  +static int ProviderXalanXSL_GetContentPtr     (/*in*/ req *            r,
                                           /*in*/ tProvider *      pProvider,
                                           /*in*/ void * *         pData)
   
  @@ -284,7 +242,7 @@
   
   
   
  -int ProviderXalanXSL_FreeContent(/*in*/ req *             r,
  +static int ProviderXalanXSL_FreeContent(/*in*/ req *             r,
                                    /*in*/ tCacheItem * pItem)
   
       {
  @@ -297,7 +255,7 @@
   
   /* ------------------------------------------------------------------------ */
   
  -tProviderClass ProviderClassXalanXSL = 
  +static tProviderClass ProviderClassXalanXSL = 
       {   
       "text/*", 
       &ProviderXalanXSL_New, 
  @@ -328,23 +286,7 @@
       return owrite ((tReq *)context, buffer, len) ;
       }
   
  -/* ------------------------------------------------------------------------ */
   
  -int embperl_Xalan_Init ()
  -    {
  -    Cache_AddProviderClass ("xalan-cxsl", &ProviderClassXalanXSL) ;
  -
  -    // Call the static initializer for Xerces.
  -    XMLPlatformUtils::Initialize();
  -
  -    // Initialize Xalan.
  -    XalanTransformer::initialize();
  -
  -    
  -    theXalanTransformer = new XalanTransformer ;
  -    }
  -
  -
   /* ------------------------------------------------------------------------ */
   /*                                                                          */
   /* embperl_Xalan_Text2Text                                                  */
  @@ -442,7 +384,7 @@
   
       pStylesheetParam = sv_2mortal (CreateHashRef (
           "provider",       hashtsv,  CreateHashRef (
  -            "type",       hashtstr, "xalan-cxsl",
  +            "type",       hashtstr, "xalan-compile-xsl",
               "stylesheet", hashtsv,  CreateHashRef (
                   "provider", hashtsv, CreateHashRef (
                       "type", hashtstr, "file",
  @@ -495,6 +437,288 @@
   
       return(0);
       }
  +
  +
  +/*! Provider that reads compiles xalan stylesheet */
  +
  +typedef struct tProviderXalan
  +    {
  +    tProvider           Provider ;
  +    SV *                pOutputSV ;
  +    } tProviderXalan ;
  +
  +
  +/* ------------------------------------------------------------------------ */
  +/*                                                                          */
  +/* ProviderXalan_New                                                     */
  +/*                                                                          */
  +/*! 
  +*   \_en
  +*   Creates a new xalan provider and fills it with data from the hash pParam
  +*   The resulting provider is put into the cache structure
  +*   
  +*   @param  r               Embperl request record
  +*   @param  pItem           CacheItem which holds the output of the provider
  +*   @param  pProviderClass  Provider class record
  +*   @param  pParam          Parameter Hash
  +*                               stylesheet  filename or provider for the
  +*                                           stylesheet 
  +*   @return                 error code
  +*   \endif                                                                       
  +*
  +*   \_de                                                                        
  +*   Erzeugt einen neue Provider f�r Xalan.  Der ein Zeiger
  +*   auf den resultierenden Provider wird in die Cachestrutr eingef�gt
  +*   
  +*   @param  r               Embperl request record
  +*   @param  pItem           CacheItem welches die Ausgabe des Providers 
  +*                           speichert
  +*   @param  pProviderClass  Provider class record
  +*   @param  pParam          Parameter Hash
  +*                               stylesheet  dateiname oder provider f�r das
  +*                                           stylesheet 
  +*   @return                 Fehlercode
  +*   \endif                                                                       
  +*                                                                          
  +* ------------------------------------------------------------------------ */
  +
  +int ProviderXalan_New (/*in*/ req *              r,
  +                          /*in*/ tCacheItem *       pItem,
  +                          /*in*/ tProviderClass *   pProviderClass,
  +                          /*in*/ HV *               pParam)
  +
  +
  +    {
  +    int                 rc ;
  +    
  +    if ((rc = Provider_NewDependOne (r, sizeof(tProviderXalan), "source", pItem, 
pProviderClass, pParam)) != ok)
  +        return rc ;
  +
  +    if ((rc = Provider_AddDependOne (r, pItem -> pProvider, "stylesheet", pItem, 
pProviderClass, pParam)) != ok)
  +        return rc ;
  +
  +    return ok ;
  +    }
  +
  +/* ------------------------------------------------------------------------ */
  +/*                                                                          */
  +/* ProviderFile_AppendKey                                                        */
  +/*                                                                          */
  +/*! 
  +*   \_en
  +*   Append it's key to the keystring. If it depends on anything it must 
  +*   call Cache_AppendKey for any dependency.
  +*   
  +*   @param  r               Embperl request record
  +*   @param  pProviderClass  Provider class record
  +*   @param  pParam          Parameter Hash
  +*                               filename        name of file
  +*   @param  pKey            Key to which string should be appended
  +*   @return                 error code
  +*   \endif                                                                       
  +*
  +*   \_de                                                                        
  +*   H�ngt ein eigenen Schl�ssel an den Schl�sselstring an. Wenn irgednwelche
  +*   Abh�nigkeiten bestehen, mu� Cache_AppendKey f�r alle Abh�nigkeiten aufgerufen 
  +*   werden.
  +*   
  +*   @param  r               Embperl request record
  +*   @param  pProviderClass  Provider class record
  +*   @param  pParam          Parameter Hash
  +*                               filename        Dateiname
  +*   @param  pKey            Schl�ssel zu welchem hinzugef�gt wird
  +*   @return                 Fehlercode
  +*   \endif                                                                       
  +*                                                                          
  +* ------------------------------------------------------------------------ */
  +
  +static int ProviderXalan_AppendKey (/*in*/ req *              r,
  +                                   /*in*/ tProviderClass *   pProviderClass,
  +                                   /*in*/ HV *               pParam,
  +                                   /*i/o*/ SV *              pKey)
  +    {
  +    int          rc ;
  +
  +    if ((rc = Cache_AppendKey (r, pParam, "source", pKey)) != ok)
  +        return rc;
  +
  +    if ((rc = Cache_AppendKey (r, pParam, "stylesheet", pKey)) != ok)
  +        return rc;
  +
  +    sv_catpv (pKey, "*xalan") ;
  +    return ok ;
  +    }
  +
  +/* ------------------------------------------------------------------------ */
  +/*                                                                          */
  +/* ProviderXalan_iowrite                                                    */
  +/*                                                                          */
  +/* output callback                                                          */
  +/*                                                                          */
  +/* ------------------------------------------------------------------------ */
  +
  +static long unsigned int  ProviderXalan_iowrite   (const char *buffer,
  +                     long unsigned int len,
  +                     void *context)
  +
  +    {
  +    sv_catpvn (((tProviderXalan *)context) -> pOutputSV, buffer, len) ;
  +    return len ;
  +    }
  +
  +
  +/* ------------------------------------------------------------------------ */
  +/*                                                                          */
  +/* ProviderXalan_GetContentPtr                                           */
  +/*                                                                          */
  +/*! 
  +*   \_en
  +*   Get the whole content from the provider. 
  +*   This gets the stylesheet and compiles it
  +*   
  +*   @param  r               Embperl request record
  +*   @param  pProvider       The provider record
  +*   @param  pData           Returns the content
  +*   @return                 error code
  +*   \endif                                                                       
  +*
  +*   \_de                                                                        
  +*   Holt den gesamt Inhalt vom Provider.
  +*   Die Funktion holt sich das Stylesheet und kompiliert es
  +*   
  +*   @param  r               Embperl request record
  +*   @param  pProvider       The provider record
  +*   @param  pData           Liefert den Inhalt
  +*   @return                 Fehlercode
  +*   \endif                                                                       
  +*                                                                          
  +* ------------------------------------------------------------------------ */
  +
  +
  +
  +static int ProviderXalan_GetContentSV         (/*in*/ req *            r,
  +                                        /*in*/ tProvider *      pProvider,
  +                                        /*in*/ SV * *           pData)
  +
  +    {
  +    int    rc ;
  +    char * p ;
  +    STRLEN len ;
  +    SV *   pSource ;
  +    
  +    
  +    tCacheItem * pSrcCache = Cache_GetDependency(r, pProvider -> pCache, 0) ;
  +    tCacheItem * pXSLCache = Cache_GetDependency(r, pProvider -> pCache, 0) ;
  +
  +    if ((rc = Cache_GetContentSV  (r, pSrcCache, &pSource)) != ok)
  +        return rc ;
  +
  +    if ((rc = Cache_GetContentPtr (r, pXSLCache, (void * *)&pCompiledXSL)) != ok)
  +        return rc ;
  +
  +    if (((tProviderXalan *)pProvider) -> pOutputSV)
  +        SvREFCNT_dec (((tProviderXalan *)pProvider) -> pOutputSV) ;
  +
  +    ((tProviderXalan *)pProvider) -> pOutputSV = newSV(1024) ;
  +
  +    // Our input streams...
  +    p   = SvPV (pSource, len) ;
  +    istrstream       theXMLStream(p, len);
  +
  +    // Do the transform.
  +
  +    const XalanParsedSource * parsedXML = 0;
  +    theXalanTransformer -> parseSource(&theXMLStream, parsedXML);
  +    
  +    int theResult = theXalanTransformer -> transform(*parsedXML, pCompiledXSL, r, 
iowrite, NULL);
  +
  +    if(theResult != 0)
  +     {
  +     strncpy (r -> errdat1, "XSLT", sizeof (r -> errdat1)) ;
  +     strncpy (r -> errdat2, theXalanTransformer -> getLastError(), sizeof (r -> 
errdat2) - 2) ;
  +     return rcXalanError ;
  +     }
  +
  +    *pData = ((tProviderXalan *)pProvider) -> pOutputSV ;
  +
  +
  +    return ok ;
  +    }
  +
  +/* ------------------------------------------------------------------------ */
  +/*                                                                          */
  +/* ProviderXalan_FreeContent                                             */
  +/*                                                                          */
  +/*! 
  +*   \_en
  +*   Free the cached data
  +*   
  +*   @param  r               Embperl request record
  +*   @param  pProvider       The provider record
  +*   @return                 error code
  +*   \endif                                                                       
  +*
  +*   \_de                                                                        
  +*   Gibt die gecachten Daten frei
  +*   
  +*   @param  r               Embperl request record
  +*   @param  pProvider       The provider record
  +*   @return                 Fehlercode
  +*   \endif                                                                       
  +*                                                                          
  +* ------------------------------------------------------------------------ */
  +
  +
  +
  +static int ProviderXalan_FreeContent(/*in*/ req *             r,
  +                                 /*in*/ tCacheItem * pItem)
  +
  +    {
  +    if (((tProviderXalan *)pProvider) -> pOutputSV)
  +        SvREFCNT_dec (((tProviderXalan *)pItem -> pProvider) -> pOutputSV) ;
  +
  +    ((tProviderXalan *)pItem -> pProvider) -> pOutputSV = NULL ;
  +    
  +    return ok ;
  +    }
  +
  +/* ------------------------------------------------------------------------ */
  +
  +static tProviderClass ProviderClassXalanXSL = 
  +    {   
  +    "text/*", 
  +    &ProviderXalan_New, 
  +    &ProviderXalan_AppendKey, 
  +    NULL,
  +    &ProviderXalan_GetContentSV,
  +    NULL,
  +    NULL,
  +    &ProviderXalan_FreeContent,
  +    NULL,
  +    } ;
  +
  +
  +
  +/* ------------------------------------------------------------------------ */
  +
  +int embperl_Xalan_Init ()
  +    {
  +    Cache_AddProviderClass ("xalan-compile-xsl", &ProviderClassXalanXSL) ;
  +    Cache_AddProviderClass ("xalan", &ProviderClassXalan) ;
  +
  +    // Call the static initializer for Xerces.
  +    XMLPlatformUtils::Initialize();
  +
  +    // Initialize Xalan.
  +    XalanTransformer::initialize();
  +
  +    
  +    theXalanTransformer = new XalanTransformer ;
  +    }
  +
  +
  +
  +
   
   } /* extern C */
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to