richter     00/05/30 07:12:36

  Modified:    .        Tag: Embperl2 epcomp.c epdom.c epdom.h
               Embperl  Tag: Embperl2 Syntax.pm
               test/cmp Tag: Embperl2 error.htm
               test/html Tag: Embperl2 table.htm
  Log:
  Embperl 2 - Tables
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.18  +35 -20    embperl/Attic/epcomp.c
  
  Index: epcomp.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epcomp.c,v
  retrieving revision 1.1.2.17
  retrieving revision 1.1.2.18
  diff -u -r1.1.2.17 -r1.1.2.18
  --- epcomp.c  2000/05/29 14:22:08     1.1.2.17
  +++ epcomp.c  2000/05/30 14:12:32     1.1.2.18
  @@ -24,13 +24,16 @@
       int             bPopStack ;
       int                  numPerlCode ;
       int                  bRemoveNode ;
  -    int                  bMayJump ;
  +    int                  bPerlCodeRemove ;
  +    const char *    sMayJump ;
       } ;
   
   typedef struct tEmbperlCmd tEmbperlCmd ;
   
   char * pProg = NULL ;
   
  +int nLabelCnt ;
  +
   tStringIndex nMaxEmbperlCmd ;
   struct tEmbperlCmd * pEmbperlCmds ;
   
  @@ -111,8 +114,9 @@
       pEmbperlCmds[nNodeName].sStackName   = GetHashValueStr (pHash, "stackname", 
NULL) ;
       pEmbperlCmds[nNodeName].sPushStack   = GetHashValueStr (pHash, "push", NULL) ;
       pEmbperlCmds[nNodeName].bRemoveNode  = GetHashValueInt (pHash, "removenode", 0) 
;
  -    pEmbperlCmds[nNodeName].bMayJump     = GetHashValueInt (pHash, "mayjump", 0) ;
  +    pEmbperlCmds[nNodeName].sMayJump     = GetHashValueStr (pHash, "mayjump", NULL) 
;
       pEmbperlCmds[nNodeName].bPopStack    = GetHashValueInt (pHash, "pop", 0) ;
  +    pEmbperlCmds[nNodeName].bPerlCodeRemove  = GetHashValueInt (pHash, 
"perlcoderemove", 0) ;
   
   
       if (r -> bDebug & dbgParse)
  @@ -485,6 +489,12 @@
                        int  l = sprintf (s, "$_ep_DomTree,%u", pNode -> xNdx) ;
                        StringAdd (ppCode, s, l) ; 
                        }
  +                 else if (*p == 'l')
  +                     {
  +                     char s [20] ;
  +                     int  l = sprintf (s, "%u", pNode -> xNdx) ;
  +                     StringAdd (ppCode, s, l) ; 
  +                     }
                    }
   
                sPerlCode = q + 1 ;
  @@ -526,7 +536,7 @@
       int             nAttr = 0 ;
       char *          pCode = NULL ; 
       char *          sStackValue = NULL ;
  -               
  +    int                  nStartCodeOffset = 0 ;               
   
       if (*bCheckpointPending && (pNode -> nType == ntypText || pNode -> nType == 
ntypCDATA) && pNode -> bFlags && (pNode -> bFlags & nflgIgnore) == 0)
        {
  @@ -534,7 +544,7 @@
        char buf [80] ;
        
        pNode -> bFlags |= nflgCheckpoint ;
  -     l = sprintf (buf, "_ep_cp($_ep_DomTree,%d) ;\n", pNode -> xNdx) ;
  +     l = sprintf (buf, "_ep_cp($_ep_DomTree,%d) ;\n", *bCheckpointPending<0?pNode 
-> xNdx:*bCheckpointPending) ;
        StringAdd (&pProg, buf,  l) ; 
        *bCheckpointPending = 0 ;
        }
  @@ -571,6 +581,8 @@
                       if (pCode)
                           {
                        int l = ArrayGetSize (pCode) ;
  +                     if (pCmd -> bPerlCodeRemove)
  +                            nStartCodeOffset = StringAdd (&pProg, " ", 1) ;
                           if (l)
                               StringAdd (&pProg, pCode, l) ;
                        StringAdd (&pProg, "\n",  1) ; 
  @@ -604,8 +616,12 @@
   
                    }
                }
  -            if (pCmd -> bMayJump)
  -                *bCheckpointPending = 1 ;
  +            if (pCmd -> sMayJump)
  +                if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sMayJump, 
&sStackValue))
  +                 {
  +                 *bCheckpointPending = -1 ;
  +                 }
  +
            if (pCmd -> bRemoveNode & 1)
                Node_selfRemoveChild(pDomTree, -1, pNode) ;
               else if (pCmd -> bRemoveNode & 8)
  @@ -624,18 +640,6 @@
       else
           pCmd = NULL ;
       
  -    /*
  -    if (*bCheckpointPending && pNode -> bFlags && (pNode -> bFlags & nflgIgnore) == 
0)
  -     {
  -     int l ;
  -     char buf [80] ;
  -     
  -     pNode -> bFlags |= nflgCheckpoint ;
  -     l = sprintf (buf, "_ep_cp($_ep_DomTree,%d) ;\n", pNode -> xNdx) ;
  -     StringAdd (&pProg, buf,  l) ; 
  -     *bCheckpointPending = 0 ;
  -     }
  -    */
       xChildNode = pNode -> bFlags?Node_firstChild (pDomTree, xNode):0 ;
   
       while (xChildNode)
  @@ -657,8 +661,18 @@
                StringAdd (&pProg, "\n",  1) ; 
                   }
               }
  -     if (pCmd -> sPerlCodeEnd && pCmd -> bMayJump)
  -         *bCheckpointPending = 1 ;
  +     else
  +         {
  +         if (pCmd -> bPerlCodeRemove && nStartCodeOffset)
  +             {
  +             pProg[nStartCodeOffset] = '#' ;
  +             }
  +         }
  +        if (pCmd -> sPerlCodeEnd && pCmd -> sMayJump)
  +            if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sMayJump, 
&sStackValue))
  +             {
  +             *bCheckpointPending = -1 ;
  +             }
           if (pCmd -> sStackName && pCmd -> sPushStack)
               {
               embperl_CompilePopStack (pDomTree, pCmd -> sStackName) ;
  @@ -723,6 +737,7 @@
        StringAdd (&pProg, "my $_ep_DomTree = $_[1];\nmy $_ep_EscMask = 
5;\n*_ep_rp=\\&XML::Embperl::DOM::Node_replaceChildWithCDATA;\n*_ep_rpurl=\\&XML::Embperl::DOM::Node_replaceChildWithUrlDATA;\n*_ep_cp=\\&XML::Embperl::DOM::DomTree_checkpoint;\n
 ", 0) ;
   
           pDomTree -> pSV = (SV *)newHV () ;
  +     nLabelCnt = 1 ;
   
        while (xNode)
            {
  
  
  
  1.1.2.22  +37 -7     embperl/Attic/epdom.c
  
  Index: epdom.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epdom.c,v
  retrieving revision 1.1.2.21
  retrieving revision 1.1.2.22
  diff -u -r1.1.2.21 -r1.1.2.22
  --- epdom.c   2000/05/29 14:22:08     1.1.2.21
  +++ epdom.c   2000/05/30 14:12:33     1.1.2.22
  @@ -278,7 +278,7 @@
   /* ------------------------------------------------------------------------ */
   
   
  -void StringAdd (/*in*/ char * *         pArray,
  +int StringAdd (/*in*/ char * *          pArray,
               /*in*/ const char * sAdd,
               /*in*/ int          nLen)
   
  @@ -292,6 +292,7 @@
   
       memcpy ((*pArray)+nIndex, sAdd, nLen) ;
       
  +    return nIndex ;
       }
   
   
  @@ -1169,6 +1170,7 @@
       int   nOrderNdx = *pOrderNdx ;
       tNodeData * pNextNode ;
       tNodeData * pSavedNode = NULL ;
  +    tNodeData * pLastStartTag = NULL ;
       struct tNodeData * pNode = Node_self (pDomTree, xNode) ;
       
       
  @@ -1193,12 +1195,35 @@
            if ((xNextNode = pDomTree -> pOrder[nOrderNdx]) != pNode -> xNdx)   
                {
                tNodeData * pNewNode ;
  +                tNodeData * pNewParent ;
  +                tNodeData * pParent ;
                   
                   if (pCurrReq -> bDebug & dbgParse)
                    lprintf (r, "[%d]toString: Skip Node=%d to Node=%d\n", r -> nPid, 
pNode -> xNdx, xNextNode) ; 
                   pSavedNode = NULL ;
  -             pNode      = Node_self (pDomTree, xNextNode) ;
  -                }
  +             pNewNode      = Node_self (pDomTree, xNextNode) ;
  +             pNewParent    = Node_selfParentNode (pDomTree, pNewNode) ;
  +             if (pParent       = pLastStartTag)
  +                 {
  +                 while (pNewParent != pParent)
  +                     {
  +                     if (pParent)
  +                         {
  +                         oputs (r, "</") ;
  +                         oputs (r, Node_selfNodeName (pParent)) ;
  +                         oputc (r, '>') ;
  +                         }
  +                     else
  +                         {
  +                         lprintf (r, "[%d]WARN: unstructured jump\n", r -> nPid) ;
  +                         break ;
  +                         }
  +                     pParent = Node_selfParentNode (pDomTree, pParent) ;
  +                     }
  +                 }
  +             pLastStartTag = NULL ;
  +             pNode = pNewNode ;
  +             }
            nOrderNdx++ ;
            }
        if (pSavedNode)
  @@ -1214,6 +1239,9 @@
            int n = pNode -> numAttr ;
            struct tAttrData * pAttr = (struct tAttrData *)(pNode + 1) ;
   
  +         if (pNode -> nType == ntypStartTag)
  +             pLastStartTag = pNode ;
  +
            oputc (r, '<') ;
            oputs (r, Node_selfNodeName (pNode)) ;
            
  @@ -1285,14 +1313,16 @@
                       return ;
                       }
                    
  -             if (pNextNode -> nType == ntypStartTag && (pNextNode -> bFlags & 
nflgIgnore) == 0)
  +             pNode = pNextNode ;
  +             pNextNode  = Node_selfNextSibling (pDomTree, pNextNode) ;
  +             if (pNode -> nType == ntypStartTag && (pNode -> bFlags & nflgIgnore) 
== 0 &&
  +                 ((pNextNode -> bFlags & nflgCheckpoint) == 0 || pDomTree -> 
pOrder[nOrderNdx] == pNextNode -> xNdx))
                    {
                    oputs (r, "</") ;
  -                 oputs (r, Node_selfNodeName (pNextNode)) ;
  +                 oputs (r, Node_selfNodeName (pNode)) ;
                    oputc (r, '>') ;
  +                 pLastStartTag = Node_selfParentNode (pDomTree, pNextNode) ;
                    }
  -             pNode = pNextNode ;
  -             pNextNode  = Node_selfNextSibling (pDomTree, pNextNode) ;
                }
            }
        pSavedNode = NULL ;
  
  
  
  1.1.2.18  +1 -1      embperl/Attic/epdom.h
  
  Index: epdom.h
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epdom.h,v
  retrieving revision 1.1.2.17
  retrieving revision 1.1.2.18
  diff -u -r1.1.2.17 -r1.1.2.18
  --- epdom.h   2000/05/29 14:22:10     1.1.2.17
  +++ epdom.h   2000/05/30 14:12:33     1.1.2.18
  @@ -185,7 +185,7 @@
   
   void StringFree (/*in*/ char * * pArray) ;
   
  -void StringAdd (/*in*/ char * *         pArray,
  +int StringAdd (/*in*/ char * *          pArray,
               /*in*/ const char * sAdd,
               /*in*/ int          nLen) ;
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.12  +56 -36    embperl/Embperl/Attic/Syntax.pm
  
  Index: Syntax.pm
  ===================================================================
  RCS file: /home/cvs/embperl/Embperl/Attic/Syntax.pm,v
  retrieving revision 1.1.2.11
  retrieving revision 1.1.2.12
  diff -u -r1.1.2.11 -r1.1.2.12
  --- Syntax.pm 2000/05/29 14:22:35     1.1.2.11
  +++ Syntax.pm 2000/05/30 14:12:33     1.1.2.12
  @@ -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.11 2000/05/29 14:22:35 richter Exp $
  +#   $Id: Syntax.pm,v 1.1.2.12 2000/05/30 14:12:33 richter Exp $
   #
   ###################################################################################
   
  @@ -92,10 +92,12 @@
               embperl => { 
                       perlcode => 
                           [
  -                        'if (!defined 
(_ep_rp(%$n%,scalar(do{%#~0:$row|$col|$cnt%})))) { last ; }  %^*-htmltable%',
  +                        'if (!defined (_ep_rp(%$n%,scalar(do{%#~0:$col%})))) { last 
l%^*htmlrow% ; }',
  +                        'if (!defined (_ep_rp(%$n%,scalar(do{%#~0:$row%})))) { last 
l%^*htmltable% ; }',
                           '_ep_rp(%$n%,scalar(do{%#0%}));', 
                           ],
                       removenode  => 4,
  +                    mayjump => '%#~0:$col|$row|$cnt% %?*htmlrow% %?*htmltable%'
                       }
               },
           },
  @@ -284,10 +286,12 @@
           %HtmlTagsStd,
           'procinfo' => {
               embperl => { 
  -                perlcode    => 'for (my $col = 0; $col < $maxcol; $col++) {' ,
  -                perlcodeend => '}' ,
  -                stackname   => 'htmltable',
  -                push        => '1',
  +                perlcode    => 'l%$l%: for (my $col = 0; $col < $maxcol; $col++) {' 
,
  +                perlcodeend => '} %?*-htmlrow%' ,
  +                perlcoderemove => 1,
  +                stackname   => 'htmlrow',
  +                push        => '%$l%',
  +                mayjump     => 1,
                   }                     
               },
           },
  @@ -302,10 +306,12 @@
           %HtmlTagsStd,
           'procinfo' => {
               embperl => { 
  -                perlcode    => 'for (my $row = 0; $row < $maxrow; $row++) {' ,
  -                perlcodeend => '}' ,
  +                perlcode    => 'l%$l%: for (my $row = 0; $row < $maxrow; $row++) {' 
,
  +                perlcodeend =>  '} %?*-htmltable%' ,
  +                perlcoderemove => 1,
                   stackname   => 'htmltable',
  -                push        => '1',
  +                push        => '%$l%',
  +                mayjump     => 1,
                   }                     
               },
            },
  @@ -621,7 +627,7 @@
   
   Type of nodes for data inside this node.
   
  -=item endtag
  +=item 'endtag'
   
   Name of the tag that marks the end of a block.
   
  @@ -658,55 +664,72 @@
   
   =over 4
   
  -=item %#N% 
  +=item %#<N>% 
   
  -Text of childnode number N (starting with zero)
  +Text of childnode number <N> (starting with zero)
   
  -=item %#*N%
  +=item %&<attr>%
   
  -Value of attribute <attr>. Attrbute must exist.
  +Value of attribute <attr>.
  +
  +=item %^<stackname>%
   
  -=item %#!N%
  +Stringvalue of given stack
   
  -Text of childnode number N (starting with zero). Child must not exist.
  +=item %?<stackname>%
   
  -=item %#=N:<value1>|<value2>|<value3>%
  +Set if stackvalue was used
   
  -Text of childnode number N (starting with zero). Child must have the value = 
<value1> or <value2> etc.
  +=item %$n%
   
  -=item %#~N:<value1>|<value2>|<value3>%
  +Node number.
   
  -Text of childnode number N (starting with zero). Child must contain the substring 
<value1> or <value2> etc.
  +=item %$l%
   
  -=item %&<attr>%
  +Unique label
   
  -Value of attribute <attr>.
  +=item %$l+%
   
  -=item %&*<attr>%
  +Unique label and increment to next label
   
  -Value of attribute <attr>. Attrbute must exist.
  +=back
   
  -=item %&!<attr>%
   
  -Value of attribute <attr>. Attribute must not exist.
  +All of the above special values (expect those start with $) allows the following
  +modifiers:
   
  -=item %&=<attr>:<value1>|<value2>|<value3>%
  +=over 4
   
  -Value of attribute <attr>. Attribute must have the value = <value1> or <value2> etc.
  +=item %<X>B<*><N>%
   
  -=item %&~<attr>:<value1>|<value2>|<value3>%
  +Attribute/Child etc. must exist.
   
  -Value of attribute <attr>. Attribute must contain the substring <value1> or 
<value2> etc.
  +=item %<X>B<!><N>%
   
  -=item %$n%
  +Attribute/Child etc. must not exist.
   
  -Node number.
  +=item %<X>B<=><N>:<value1>|<value2>|<value3>%
   
  +Attribute/Child etc. must have the value = <value1> or <value2> etc.
  +
  +=item %<X>B<~><N>:<value1>|<value2>|<value3>%
  +
  +Attribute/Child etc. must contain the substring <value1> or <value2> etc.
  +
   =back
   
   writing a minus sign (-) after * ! = or ~ will cause the child/attribute
   not to be included, but the condition is evaluated.
   
  +=item perlcodeend => <string> 
  +
  +Code to generate at the end of the block.
  +
  +=item perlcoderemove => 0/1
  +
  +Remove perlcode if perlcodeend condition is not met.
  +
  +
   =item removenode => <removelevel>
   
   Remove node after compiling. <removelevel> could be one of the following,
  @@ -733,14 +756,11 @@
   
   =back
   
  -=item perlendcode => <string> 
  -
  -Code to generate at the end of the block.
  -
   =item mayjump => 0/1
   
   If set, tells the compiler that this code may jump to another programm location.
   (e.g. if, while, goto etc.).
  +
   
   =back
   
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.5.2.3   +1 -1      embperl/test/cmp/error.htm
  
  Index: error.htm
  ===================================================================
  RCS file: /home/cvs/embperl/test/cmp/error.htm,v
  retrieving revision 1.5.2.2
  retrieving revision 1.5.2.3
  diff -u -r1.5.2.2 -r1.5.2.3
  --- error.htm 2000/05/29 14:23:14     1.5.2.2
  +++ error.htm 2000/05/30 14:12:34     1.5.2.3
  @@ -11,7 +11,7 @@
   ^<br>&nbsp;&nbsp;&nbsp;&nbsp;syntax error at test/html/error.htm line \d+, near 
&quot;\$error is here &quot;
   ^<br>&nbsp;&nbsp;&nbsp;&nbsp;syntax error at test/html/error.htm line \d+, near 
&quot;}
   ^<br>&nbsp;&nbsp;&nbsp;&nbsp;_ep_cp&quot;
  -^<br>&nbsp;&nbsp;&nbsp;&nbsp;syntax error at test/html/error.htm line \d+, near 
&quot;}
  +^<br>&nbsp;&nbsp;&nbsp;&nbsp;syntax error at test/html/error.htm line \d+, near 
&quot;
   ^<br>&nbsp;&nbsp;&nbsp;&nbsp;
   ^<br>&nbsp;&nbsp;&nbsp;&nbsp;}&quot;<p>
   ^\[.*?\]ERR:  24: Line \d+: Error in Perl code: <p>
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.2.2   +58 -17    embperl/test/html/table.htm
  
  Index: table.htm
  ===================================================================
  RCS file: /home/cvs/embperl/test/html/table.htm,v
  retrieving revision 1.4.2.1
  retrieving revision 1.4.2.2
  diff -u -r1.4.2.1 -r1.4.2.2
  --- table.htm 2000/05/29 14:23:44     1.4.2.1
  +++ table.htm 2000/05/30 14:12:35     1.4.2.2
  @@ -5,23 +5,6 @@
   
   <body>
   
  -<table>
  -    <tr>
  -        <td>[+ $c[$row] +] </td>
  -    </tr> 
  -</table>
  -<table>
  -    <tr>
  -        <td>[+ $c[$col] +] </td>
  -    </tr> 
  -</table>
  -[#
  -<table>
  -    <tr>
  -        <td>[+ $c[$row][$col] +] </td>
  -    </tr> 
  -</table>
  -
   
   <p> $tabmode = default <p>
   
  @@ -56,6 +39,64 @@
      $a[2][[2] = '3/3' ;<BR>
   
   <P>$tabmode = default <P>
  +
  +
  +<table>
  +    <tr>
  +        <td>[+ $a[$row][0] +]</td>
  +    </tr> 
  +</table>
  +<table>
  +    <tr>
  +        <td>[+ $a[2][$col] +]</td>
  +    </tr> 
  +</table>
  +
  +
  +<table>
  +    <tr>
  +        <td>before[+ $a[$row][0] +]</td>
  +    </tr> 
  +</table>
  +<table>
  +    <tr>
  +        <td>before[+ $a[2][$col] +]</td>
  +    </tr> 
  +</table>
  +
  +<table>
  +    <tr>
  +        <td>[+ $a[$row][0] +]after</td>
  +    </tr> 
  +</table>
  +<table>
  +    <tr>
  +        <td>[+ $a[2][$col] +]after</td>
  +    </tr> 
  +</table>
  +<table>
  +    <tr>
  +        <td>before[+ $a[$row][0] +]after</td>
  +    </tr> 
  +</table>
  +<table>
  +    <tr>
  +        <td>before[+ $a[2][$col] +]after</td>
  +    </tr> 
  +</table>
  +
  +<table>
  +    <tr>
  +        <td>[+ $c[$row] +]</td>
  +    </tr> 
  +</table>
  +<table>
  +    <tr>
  +        <td>[+ $c[$col] +]</td>
  +    </tr> 
  +</table>
  +
  +[#
   
   <table border="2" width="100%">
       <tr>
  
  
  

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

Reply via email to