richter     00/06/13 07:31:35

  Modified:    .        Tag: Embperl2 epcomp.c epdom.c epdom.h
               Embperl  Tag: Embperl2 Syntax.pm
               test/html Tag: Embperl2 if.htm
  Log:
  Embperl 2 - Nesting of Attr and If
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.31  +138 -118  embperl/Attic/epcomp.c
  
  Index: epcomp.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epcomp.c,v
  retrieving revision 1.1.2.30
  retrieving revision 1.1.2.31
  diff -u -r1.1.2.30 -r1.1.2.31
  --- epcomp.c  2000/06/13 04:52:11     1.1.2.30
  +++ epcomp.c  2000/06/13 14:30:48     1.1.2.31
  @@ -633,151 +633,171 @@
        
        }
   
  -    while (pAttr = Element_selfGetNthAttribut (pDomTree, pNode, nAttr++))
  -     {
  -        if (pAttr -> bFlags & aflgAttrChilds)
  -            {
  -            tNodeData * pChild = Node_selfFirstChild (pDomTree, (tNodeData *)pAttr) 
;
  +    nNdx = Node_selfNodeNameNdx (pNode) ;
  +
  +    if (nNdx <= nMaxEmbperlCmd)
  +     pCmd = &pEmbperlCmds[nNdx] ;
  +    else
  +        pCmd = NULL ;
   
  -            while (pChild)
  +    if (pCmd == NULL || (pCmd -> bRemoveNode & 8) == 0)
  +        { /* calculate attributes before tag, but not when tag should be ignored in 
output stream */
  +        while (pAttr = Element_selfGetNthAttribut (pDomTree, pNode, nAttr++))
  +         {
  +            if (pAttr -> bFlags & aflgAttrChilds)
                   {
  -                embperl_CompileNode (pDomTree, pChild -> xNdx, bCheckpointPending) ;
  -                pChild = Node_selfNextSibling (pDomTree, pChild) ;
  -                }
  -            }                
  +                tNodeData * pChild = Node_selfFirstChild (pDomTree, (tNodeData 
*)pAttr) ;
   
  -     }
  +                while (pChild)
  +                    {
  +                    embperl_CompileNode (pDomTree, pChild -> xNdx, 
bCheckpointPending) ;
  +                    pChild = Node_selfNextSibling (pDomTree, pChild) ;
  +                    }
  +                }                
   
  +         }
  +        }            
       
  -    nNdx = Node_selfNodeNameNdx (pNode) ;
  +    if (pCmd)
  +        {
  +        int i ;
   
  -    if (nNdx <= nMaxEmbperlCmd)
  -     {
  -     pCmd = &pEmbperlCmds[nNdx] ;
  -     if (pCmd)
  +        for (i = 0; i < pCmd -> numCompileTimePerlCode; i++)
               {
  -            int i ;
  -
  -            for (i = 0; i < pCmd -> numCompileTimePerlCode; i++)
  +            if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> 
sCompileTimePerlCode[i], &pCode))
                   {
  -                if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> 
sCompileTimePerlCode[i], &pCode))
  -                    {
  -                    SV * pSV ;
  -                 int   rc ;
  +                SV * pSV ;
  +             int   rc ;
   
  -                 if (pCode)
  -                        {
  -                     int l = ArrayGetSize (pCode) ;
  -                     if (pCurrReq -> bDebug & dbgParse)
  -                         lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d CompileTimeCode:   
 %*.*s\n", pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber, l, l, pCode) ; 
  +             if (pCode)
  +                    {
  +                 int l = ArrayGetSize (pCode) ;
  +                 if (pCurrReq -> bDebug & dbgParse)
  +                     lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d CompileTimeCode:    
%*.*s\n", pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber, l, l, pCode) ; 
   
  -                     pSV = newSVpvf("package %s ; \n#line %d \"%s\"\n%*.*s",
  -                             pCurrReq -> Buf.sEvalPackage, pNode ->  nLinenumber, 
sSourcefile, l,l, pCode) ;
  -                     if ((rc = EvalDirect (pCurrReq, pSV)) != ok)
  -                         LogError (pCurrReq, rc) ;
  -                     SvREFCNT_dec(pSV);
  -                     }
  -                    break ;
  -                    }
  +                 pSV = newSVpvf("package %s ; \n#line %d \"%s\"\n%*.*s",
  +                         pCurrReq -> Buf.sEvalPackage, pNode ->  nLinenumber, 
sSourcefile, l,l, pCode) ;
  +                 if ((rc = EvalDirect (pCurrReq, pSV)) != ok)
  +                     LogError (pCurrReq, rc) ;
  +                 SvREFCNT_dec(pSV);
  +                 }
  +                break ;
                   }
  -            for (i = 0; i < pCmd -> numPerlCode; i++)
  +            }
  +        for (i = 0; i < pCmd -> numPerlCode; i++)
  +            {
  +            if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sPerlCode[i], 
&pCode))
                   {
  -                if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> 
sPerlCode[i], &pCode))
  +                if (pCode)
                       {
  -                    if (pCode)
  +                 int l = ArrayGetSize (pCode) ;
  +
  +                    if (l)
                           {
  -                     int l = ArrayGetSize (pCode) ;
  +                        char buf [32] ;
   
  -                        if (l)
  +                        if (pNode ->  nLinenumber)
                               {
  -                            char buf [32] ;
  +                            int l2 = sprintf (buf, "#line %d \"", pNode ->  
nLinenumber) ;
   
  -                            if (pNode ->  nLinenumber)
  -                                {
  -                                int l2 = sprintf (buf, "#line %d \"", pNode ->  
nLinenumber) ;
  -
  -                                StringAdd (&pProg, buf, l2) ;
  -                                StringAdd (&pProg, sSourcefile, nSourcefile) ;
  -                                StringAdd (&pProg, "\"\n", 2) ;
  -                                }                        
  -                        
  -                            if (pCmd -> bPerlCodeRemove)
  -                                nStartCodeOffset = StringAdd (&pProg, " ", 1) ;
  -                            StringAdd (&pProg, pCode, l) ;
  -                         StringAdd (&pProg, "\n",  1) ; 
  -                         if (pCurrReq -> bDebug & dbgParse)
  -                             lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Code:    
%*.*s\n", pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber, l, l, pCode) ; 
  -                            }
  -                     }
  -                    break ;
  -                    }
  +                            StringAdd (&pProg, buf, l2) ;
  +                            StringAdd (&pProg, sSourcefile, nSourcefile) ;
  +                            StringAdd (&pProg, "\"\n", 2) ;
  +                            }                        
  +                    
  +                        if (pCmd -> bPerlCodeRemove)
  +                            nStartCodeOffset = StringAdd (&pProg, " ", 1) ;
  +                        StringAdd (&pProg, pCode, l) ;
  +                     StringAdd (&pProg, "\n",  1) ; 
  +                     if (pCurrReq -> bDebug & dbgParse)
  +                         lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Code:    %*.*s\n", 
pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber, l, l, pCode) ; 
  +                        }
  +                 }
  +                break ;
                   }
  +            }
   
  -            if (pCmd -> bRemoveNode & 6)
  -             {
  -             tNodeData *  pNextNode    = Node_selfFirstChild (pDomTree, pNode) ;
  -             if (pNextNode == NULL || (pNextNode -> nType != ntypText && pNextNode 
-> nType != ntypCDATA))
  -                 pNextNode    = Node_selfNextSibling (pDomTree, pNode) ;
  -             if (pNextNode)
  -                 {
  -                 const char * sText        = Node_selfNodeName (pNextNode) ;
  -                 const char * p            = sText ;
  -
  -                 while (*p && isspace (*p))
  -                     p++;
  -                 if (p > sText && (pCmd -> bRemoveNode & 4))
  -                     p-- ;
  -
  -                 if (p > sText)
  -                     { /* remove spaces */
  -                     if (*p)
  -                         Node_replaceChildWithCDATA(pDomTree, -1, pNextNode -> 
xNdx, p, strlen (p), -1, 0) ;
  -                     else
  -                         Node_selfRemoveChild(pDomTree, -1, pNextNode) ;
  -                     }
  +        if (pCmd -> bRemoveNode & 6)
  +         {
  +         tNodeData *  pNextNode    = Node_selfFirstChild (pDomTree, pNode) ;
  +         if (pNextNode == NULL || (pNextNode -> nType != ntypText && pNextNode -> 
nType != ntypCDATA))
  +             pNextNode    = Node_selfNextSibling (pDomTree, pNode) ;
  +         if (pNextNode)
  +             {
  +             const char * sText        = Node_selfNodeName (pNextNode) ;
  +             const char * p            = sText ;
   
  +             while (*p && isspace (*p))
  +                 p++;
  +             if (p > sText && (pCmd -> bRemoveNode & 4))
  +                 p-- ;
  +
  +             if (p > sText)
  +                 { /* remove spaces */
  +                 if (*p)
  +                     Node_replaceChildWithCDATA(pDomTree, -1, pNextNode -> xNdx, p, 
strlen (p), -1, 0) ;
  +                 else
  +                     Node_selfRemoveChild(pDomTree, -1, pNextNode) ;
                    }
  -             }
  -            if (pCmd -> sMayJump)
  -                if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sMayJump, 
&sStackValue))
  -                 {
  -                 *bCheckpointPending = -1 ;
  -                 if (pCurrReq -> bDebug & dbgParse)
  -                     lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Set Checkpoint 
pending\n", pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber) ; 
  -                 }
  -
  -         if (pCmd -> bRemoveNode & 1)
  -             Node_selfRemoveChild(pDomTree, -1, pNode) ;
  -            else if (pCmd -> bRemoveNode & 8)
  -             pNode -> bFlags |= nflgIgnore ;
   
  -         if (nCheckpointCodeOffset && (pNode -> bFlags == 0 || (pNode -> bFlags & 
nflgIgnore)))
  -             {
  -             pProg[nCheckpointCodeOffset] = '#' ;
  +             }
  +         }
  +        if (pCmd -> sMayJump)
  +            if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sMayJump, 
&sStackValue))
  +             {
  +             *bCheckpointPending = -1 ;
                if (pCurrReq -> bDebug & dbgParse)
  -                 lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Remove Checkpoint\n", 
pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber) ; 
  -             nCheckpointCodeOffset = 0 ;
  +                 lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Set Checkpoint pending\n", 
pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber) ; 
  +             }
  +
  +     if (pCmd -> bRemoveNode & 1)
  +         Node_selfRemoveChild(pDomTree, -1, pNode) ;
  +        else if (pCmd -> bRemoveNode & 8)
  +         pNode -> bFlags |= nflgIgnore ;
  +
  +     if (nCheckpointCodeOffset && (pNode -> bFlags == 0 || (pNode -> bFlags & 
nflgIgnore)))
  +         {
  +         pProg[nCheckpointCodeOffset] = '#' ;
  +         if (pCurrReq -> bDebug & dbgParse)
  +             lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Remove Checkpoint\n", pCurrReq 
-> nPid, pNode -> xNdx, pNode -> nLinenumber) ; 
  +         nCheckpointCodeOffset = 0 ;
  +         }
  +    
  +     if (pCmd -> sStackName && pCmd -> sPushStack)
  +            {
  +            if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sPushStack, 
&sStackValue))
  +             {
  +                embperl_CompilePushStack (pDomTree, pCmd -> sStackName, 
sStackValue) ;
                }
  -     
  -         if (pCmd -> sStackName && pCmd -> sPushStack)
  -                {
  -                if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sPushStack, 
&sStackValue))
  -                 {
  -                    embperl_CompilePushStack (pDomTree, pCmd -> sStackName, 
sStackValue) ;
  -                 }
  -                }
  -         if (pCmd -> sStackName2 && pCmd -> sPushStack2)
  -                {
  -                if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> 
sPushStack2, &sStackValue))
  -                 {
  -                    embperl_CompilePushStack (pDomTree, pCmd -> sStackName2, 
sStackValue) ;
  -                 }
  -                }
  +            }
  +     if (pCmd -> sStackName2 && pCmd -> sPushStack2)
  +            {
  +            if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sPushStack2, 
&sStackValue))
  +             {
  +                embperl_CompilePushStack (pDomTree, pCmd -> sStackName2, 
sStackValue) ;
  +             }
               }
           }
  -    else
  -        pCmd = NULL ;
       
  +    
  +    if (pCmd  && (pCmd -> bRemoveNode & 8) != 0)
  +        { /* calculate attributes after tag when tag should be ignored in output 
stream */
  +        while (pAttr = Element_selfGetNthAttribut (pDomTree, pNode, nAttr++))
  +         {
  +            if (pAttr -> bFlags & aflgAttrChilds)
  +                {
  +                tNodeData * pChild = Node_selfFirstChild (pDomTree, (tNodeData 
*)pAttr) ;
  +
  +                while (pChild)
  +                    {
  +                    embperl_CompileNode (pDomTree, pChild -> xNdx, 
bCheckpointPending) ;
  +                    pChild = Node_selfNextSibling (pDomTree, pChild) ;
  +                    }
  +                }                
  +
  +         }
  +        }            
  +
       if (pCmd == NULL || pCmd -> bCompileChilds)
        {
        xChildNode = pNode -> bFlags?Node_firstChild (pDomTree, xNode):0 ;
  
  
  
  1.1.2.34  +13 -3     embperl/Attic/epdom.c
  
  Index: epdom.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epdom.c,v
  retrieving revision 1.1.2.33
  retrieving revision 1.1.2.34
  diff -u -r1.1.2.33 -r1.1.2.34
  --- epdom.c   2000/06/13 04:52:12     1.1.2.33
  +++ epdom.c   2000/06/13 14:30:49     1.1.2.34
  @@ -1461,7 +1461,7 @@
   
   
   
  -void Node_toString2 (/*in*/  tDomTree *     pDomTree,
  +tNodeData * Node_toString2 (/*in*/  tDomTree *     pDomTree,
                    /*i/o*/ register req *  r,
                    /*in*/  tNode           xNode,
                       /*in*/  int *           pOrderNdx)
  @@ -1588,7 +1588,15 @@
   
                        if (pAttr -> bFlags & aflgAttrChilds)
                            {
  -                         Node_toString2 (pDomTree, r, pAttr -> xNdx, &nOrderNdx) ;
  +                         tAttrData * pAttrNode = (tAttrData * )Node_toString2 
(pDomTree, r, pAttr -> xNdx, &nOrderNdx) ;
  +                            if (pAttrNode && pAttrNode != pAttr)
  +                                {
  +                                pAttr = pAttrNode ;
  +                                pNode = Attr_selfNode(pAttr) ;
  +                                n = pNode -> numAttr - Attr_selfAttrNum (pAttr) - 1 
;
  +                                if (n < 0)
  +                                    n = 0 ;
  +                                }
                            }
                        else
                            {
  @@ -1639,7 +1647,7 @@
                if (pNextNode == NULL || pNextNode  == pFirstNode || pNextNode -> 
nType == ntypAttr)
                       {
                       *pOrderNdx = nOrderNdx ;
  -                    return ;
  +                    return pNextNode ;
                       }
                    
                pNode = pNextNode ;
  @@ -1659,6 +1667,8 @@
        }
   
       *pOrderNdx = nOrderNdx ;
  +
  +    return NULL ;    
       }
   
   void Node_toString (/*in*/  tDomTree *   pDomTree,
  
  
  
  1.1.2.25  +5 -0      embperl/Attic/epdom.h
  
  Index: epdom.h
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epdom.h,v
  retrieving revision 1.1.2.24
  retrieving revision 1.1.2.25
  diff -u -r1.1.2.24 -r1.1.2.25
  --- epdom.h   2000/06/09 14:23:02     1.1.2.24
  +++ epdom.h   2000/06/13 14:30:50     1.1.2.25
  @@ -274,6 +274,7 @@
   #define Node_selfNodeName(pNode)         (Ndx2String (pNode -> nText))
   #define Node_nodeName(pDomTree,pNode)            (Ndx2String (Node_self 
(pDomTree,xNode) -> nText))
   #define Node_selfPad(pNode)        ((struct tNodePad * )(((tUInt8 *)pNode) - pNode 
-> nPadOffset))
  +#define Node_selfFirstAttr(pNodePad)     ((tAttrData *)(pNode + 1))
   
   tNodeData * Node_selfCloneNode (/*in*/ tDomTree *      pDomTree,
                                /*in*/ tNodeData *     pNode,
  @@ -335,8 +336,12 @@
                                      /*in*/ int                bClone) ;
   
   #define Attr_self(pDomTree,xAttr)        ((struct tAttrData *)(pDomTree -> 
pLookup[xAttr]))
  +#define Attr_selfNode(pAttr)        ((struct tNodeData * )(((tUInt8 *)pAttr) - 
pAttr -> nNodeOffset))
  +#define Attr_selfAttrNum(pAttr)    (pAttr - Node_selfFirstAttr 
(Attr_selfNode(pAttr)))
   
   
   char *       Attr_selfValue (/*in*/ tDomTree *               pDomTree,
                             /*in*/ struct tAttrData * pAttr,
                            /*out*/ char * *    ppAttr) ;
  +
  +
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.24  +12 -7     embperl/Embperl/Attic/Syntax.pm
  
  Index: Syntax.pm
  ===================================================================
  RCS file: /home/cvs/embperl/Embperl/Attic/Syntax.pm,v
  retrieving revision 1.1.2.23
  retrieving revision 1.1.2.24
  diff -u -r1.1.2.23 -r1.1.2.24
  --- Syntax.pm 2000/06/13 07:59:05     1.1.2.23
  +++ Syntax.pm 2000/06/13 14:31:01     1.1.2.24
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: Syntax.pm,v 1.1.2.23 2000/06/13 07:59:05 richter Exp $
  +#   $Id: Syntax.pm,v 1.1.2.24 2000/06/13 14:31:01 richter Exp $
   #
   ###################################################################################
   
  @@ -489,14 +489,13 @@
   %MetaCmds = (
       'if' => {
           'text' => 'if',
  -        'nodetype'   => ntypStartTag, 
  +        'nodetype'   => ntypTag, 
           'cdatatype'  => ntypAttrValue,
           'unescape' => 1,
           'endtag'   => 'endif',
           'procinfo' => {
               embperl => { 
                   perlcode => 'if (%&<noname>%) { ', 
  -                perlcodeend => '}',
                   removenode => 10,
                   mayjump     => 1,
                   }
  @@ -504,13 +503,12 @@
            },
       'else' => {
           'text' => 'else',
  -        'nodetype'   => ntypEndStartTag, 
  +        'nodetype'   => ntypTag, 
           'unescape' => 1,
           'endtag'   => 'endif',
           'procinfo' => {
               embperl => { 
  -                perlcode => 'else {',
  -                perlcodeend => '}',
  +                perlcode => '} else {',
                   removenode => 10,
                   mayjump     => 1,
                   }
  @@ -518,7 +516,14 @@
            },
       'endif' => {
           'text' => 'endif',
  -        'nodetype'   => ntypEndTag, 
  +        'nodetype'   => ntypTag, 
  +        'procinfo' => {
  +            embperl => { 
  +                perlcode => '}', 
  +                removenode => 10,
  +                mayjump     => 1,
  +                }
  +            },
            },
       'elsif' => {
           'text' => 'elsif',
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.3.2.4   +2 -2      embperl/test/html/if.htm
  
  Index: if.htm
  ===================================================================
  RCS file: /home/cvs/embperl/test/html/if.htm,v
  retrieving revision 1.3.2.3
  retrieving revision 1.3.2.4
  diff -u -r1.3.2.3 -r1.3.2.4
  --- if.htm    2000/06/13 07:59:05     1.3.2.3
  +++ if.htm    2000/06/13 14:31:09     1.3.2.4
  @@ -344,9 +344,9 @@
   ##]
   <IMG 
   [$ if (($server_type eq "iii.co.uk")) $]
  -     SRC="/i/www.[+ $server_type +]/[+ $badge || "iiilogo_narrow_if" +].gif" 
WIDTH="[+ $icon_width +]" HEIGHT="[+ $icon_height +]" BORDER="0"
  +qqq  SRC="/i/www.[+ $server_type +]/[+ $badge || "iiilogo_narrow_if" +].gif" 
WIDTH="[+ $icon_width +]" HEIGHT="[+ $icon_height +]" BORDER="0"
   [$ else $]
  -     SRC="/icons/[+ $badge || "iiilogo_narrow_else" +].gif" WIDTH="[+ $icon_width 
+]" HEIGHT="[+ $icon_height +]" BORDER="0" 
  +www  SRC="/icons/[+ $badge || "iiilogo_narrow_else" +].gif" WIDTH="[+ $icon_width 
+]" HEIGHT="[+ $icon_height +]" BORDER="0" 
   [$ endif $]
   [$ if ($badge eq "iit") $]
        ALT="iit logo"
  
  
  

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

Reply via email to