richter     01/10/29 12:07:13

  Modified:    .        Tag: Embperl2c Cmd.xs DOM.xs epcmd2.c epcomp.c
                        epdom.c epdom.h
               test/cmp2 Tag: Embperl2c lists.htm
               test/html Tag: Embperl2c table.htm
  Log:
  Embperl 2 - tree structure rewrite
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.9   +4 -4      embperl/Cmd.xs
  
  Index: Cmd.xs
  ===================================================================
  RCS file: /home/cvs/embperl/Cmd.xs,v
  retrieving revision 1.1.2.8
  retrieving revision 1.1.2.9
  diff -u -r1.1.2.8 -r1.1.2.9
  --- Cmd.xs    2001/10/22 06:25:01     1.1.2.8
  +++ Cmd.xs    2001/10/29 20:07:12     1.1.2.9
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: Cmd.xs,v 1.1.2.8 2001/10/22 06:25:01 richter Exp $
  +#   $Id: Cmd.xs,v 1.1.2.9 2001/10/29 20:07:12 richter Exp $
   #
   ###################################################################################
   
  @@ -40,7 +40,7 @@
       STRLEN nValue ;
       char * sN = SV2String (sName, nName) ;
       char * sV = SV2String (sValue, nValue) ;
  -    embperlCmd_InputCheck (pCurrReq, DomTree_self (xDomTree), xNode, 0, sN, nName, 
sV, nValue, SvOK (bSetInSource)?1:0) ;
  +    embperlCmd_InputCheck (pCurrReq, DomTree_self (xDomTree), xNode, pCurrReq -> 
nCurrRepeatLevel, sN, nName, sV, nValue, SvOK (bSetInSource)?1:0) ;
       
   
   void
  @@ -55,7 +55,7 @@
       STRLEN nValue ;
       char * sN = SV2String (sName, nName) ;
       char * sV = SV2String (sValue, nValue) ;
  -    embperlCmd_Option (pCurrReq, DomTree_self (xDomTree), xNode, 0, sN, nName, sV, 
nValue,  SvOK (bSetInSource)?1:0) ;
  +    embperlCmd_Option (pCurrReq, DomTree_self (xDomTree), xNode, pCurrReq -> 
nCurrRepeatLevel, sN, nName, sV, nValue,  SvOK (bSetInSource)?1:0) ;
       
   
   void
  @@ -64,7 +64,7 @@
       int xNode
       char * sArg
   CODE:
  -    embperlCmd_Hidden (pCurrReq, DomTree_self (xDomTree), xNode, 0, sArg) ;
  +    embperlCmd_Hidden (pCurrReq, DomTree_self (xDomTree), xNode, pCurrReq -> 
nCurrRepeatLevel, sArg) ;
       
   
   
  
  
  
  1.1.2.18  +10 -14    embperl/DOM.xs
  
  Index: DOM.xs
  ===================================================================
  RCS file: /home/cvs/embperl/DOM.xs,v
  retrieving revision 1.1.2.17
  retrieving revision 1.1.2.18
  diff -u -r1.1.2.17 -r1.1.2.18
  --- DOM.xs    2001/10/25 08:26:02     1.1.2.17
  +++ DOM.xs    2001/10/29 20:07:12     1.1.2.18
  @@ -10,7 +10,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: DOM.xs,v 1.1.2.17 2001/10/25 08:26:02 richter Exp $
  +#   $Id: DOM.xs,v 1.1.2.18 2001/10/29 20:07:12 richter Exp $
   #
   ###################################################################################
   
  @@ -63,7 +63,7 @@
   PPCODE:
       SvGETMAGIC_P4(sText) ;
       s = SV2String (sText, l) ;
  -    Node_replaceChildWithCDATA (DomTree_self(pDomNode -> xDomTree), pDomNode -> 
xNode, pCurrReq -> nCurrRepeatLevel, s, l, (pCurrReq -> nCurrEscMode & 3)== 3?1 + 
(pCurrReq -> nCurrEscMode & 4):pCurrReq -> nCurrEscMode, nflgModified | nflgReturn) ;
  +    Node_replaceChildWithCDATA (DomTree_self(pDomNode -> xDomTree), pDomNode -> 
xNode, pCurrReq -> nCurrRepeatLevel, s, l, (pCurrReq -> nCurrEscMode & 3)== 3?1 + 
(pCurrReq -> nCurrEscMode & 4):pCurrReq -> nCurrEscMode, 0) ;
       pCurrReq -> nCurrEscMode = pCurrReq -> nEscMode ;
       pCurrReq -> bEscModeSet = -1 ;
       /*SvREFCNT_inc (sText) ;*/
  @@ -82,7 +82,7 @@
   PPCODE:
       SvGETMAGIC_P4(sText) ;
       s = SV2String (sText, l) ;
  -    Node_replaceChildWithCDATA (DomTree_self(xDomTree), xOldChild, pCurrReq -> 
nCurrRepeatLevel, s, l, (pCurrReq -> nCurrEscMode & 3)== 3?1 + (pCurrReq -> 
nCurrEscMode & 4):pCurrReq -> nCurrEscMode, nflgModified | nflgReturn) ;
  +    Node_replaceChildWithCDATA (DomTree_self(xDomTree), xOldChild, pCurrReq -> 
nCurrRepeatLevel, s, l, (pCurrReq -> nCurrEscMode & 3)== 3?1 + (pCurrReq -> 
nCurrEscMode & 4):pCurrReq -> nCurrEscMode, 0) ;
       pCurrReq -> nCurrEscMode = pCurrReq -> nEscMode ;
       pCurrReq -> bEscModeSet = -1 ;
       /*SvREFCNT_inc (sText) ;*/
  @@ -100,7 +100,7 @@
   PPCODE:
       SvGETMAGIC_P4(sText) ;
       s = SV2String (sText, l) ;
  -    Node_replaceChildWithCDATA (DomTree_self(pCurrReq -> xCurrDomTree), xOldChild, 
pCurrReq -> nCurrRepeatLevel, s, l, (pCurrReq -> nCurrEscMode & 3)== 3?1 + (pCurrReq 
-> nCurrEscMode & 4):pCurrReq -> nCurrEscMode, nflgModified | nflgReturn) ;
  +    Node_replaceChildWithCDATA (DomTree_self(pCurrReq -> xCurrDomTree), xOldChild, 
pCurrReq -> nCurrRepeatLevel, s, l, (pCurrReq -> nCurrEscMode & 3)== 3?1 + (pCurrReq 
-> nCurrEscMode & 4):pCurrReq -> nCurrEscMode, 0) ;
       pCurrReq -> nCurrEscMode = pCurrReq -> nEscMode ;
       pCurrReq -> bEscModeSet = -1 ;
       /*SvREFCNT_inc (sText) ;*/
  @@ -164,9 +164,7 @@
   CODE:
       sT = SV2String (sText, nText) ;
       pDomTree = DomTree_self(pParentNode -> xDomTree) ;
  -    Node_self (pDomTree,pParentNode -> xNode) -> bFlags |= nflgModified | 
nflgReturn ;
  -    xNewParent = Node_cloneNode (pDomTree, pParentNode -> xNode, 0, 1) ;
  -    Node_appendChild (pDomTree, xNewParent, pCurrReq -> nCurrRepeatLevel, nType, 0, 
sT, nText, 0, 0, NULL) ;
  +    Node_appendChild (pDomTree, pParentNode -> xNode, pCurrReq -> nCurrRepeatLevel, 
nType, 0, sT, nText, 0, 0, NULL) ;
   
   
   void
  @@ -180,9 +178,7 @@
       STRLEN nText ;
       char * sT = SV2String (sText, nText) ;
       tDomTree * pDomTree = DomTree_self(xDomTree) ;
  -    Node_self (pDomTree,xParent) -> bFlags |= nflgModified | nflgReturn ;
  -    xNewParent = Node_cloneNode (pDomTree, xParent, 0, 1) ;
  -    Node_appendChild (pDomTree, xNewParent, pCurrReq -> nCurrRepeatLevel, nType, 0, 
sT, nText, 0, 0, NULL) ;
  +    Node_appendChild (pDomTree, xParent, pCurrReq -> nCurrRepeatLevel, nType, 0, 
sT, nText, 0, 0, NULL) ;
   
   
   char *
  @@ -250,7 +246,7 @@
   
       pDomTree = DomTree_self (pDomNode -> xDomTree) ;
   
  -    Element_selfSetAttribut (pDomTree, Node_self (pDomTree, pDomNode -> xNode), 
pCurrReq -> nCurrRepeatLevel, sA, nAttr, sT, nText, 1) ;
  +    Element_selfSetAttribut (pDomTree, Node_self (pDomTree, pDomNode -> xNode), 
pCurrReq -> nCurrRepeatLevel, sA, nAttr, sT, nText) ;
   
   
   void
  @@ -266,7 +262,7 @@
       char * sA = SV2String (sAttr, nAttr) ;
       tDomTree * pDomTree = DomTree_self (xDomTree) ;
   
  -    Element_selfSetAttribut (pDomTree, Node_self (pDomTree, xNode), pCurrReq -> 
nCurrRepeatLevel, sA, nAttr, sT, nText, 1) ;
  +    Element_selfSetAttribut (pDomTree, Node_self (pDomTree, xNode), pCurrReq -> 
nCurrRepeatLevel, sA, nAttr, sT, nText) ;
   
   
   
  @@ -283,7 +279,7 @@
       sA = SV2String (sAttr, nAttr) ;
       pDomTree = DomTree_self (pDomNode -> xDomTree) ;
   
  -    Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, pDomNode -> xNode), 
pCurrReq -> nCurrRepeatLevel, sA, nAttr, 1) ;
  +    Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, pDomNode -> xNode), 
pCurrReq -> nCurrRepeatLevel, sA, nAttr) ;
   
   
   void
  @@ -296,7 +292,7 @@
       char * sA = SV2String (sAttr, nAttr) ;
       tDomTree * pDomTree = DomTree_self (xDomTree) ;
   
  -    Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, xNode), pCurrReq -> 
nCurrRepeatLevel, sA, nAttr, 1) ;
  +    Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, xNode), pCurrReq -> 
nCurrRepeatLevel, sA, nAttr) ;
   
   
   ################################################################################
  
  
  
  1.4.2.14  +7 -25     embperl/Attic/epcmd2.c
  
  Index: epcmd2.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epcmd2.c,v
  retrieving revision 1.4.2.13
  retrieving revision 1.4.2.14
  diff -u -r1.4.2.13 -r1.4.2.14
  --- epcmd2.c  2001/10/25 08:26:02     1.4.2.13
  +++ epcmd2.c  2001/10/29 20:07:12     1.4.2.14
  @@ -9,7 +9,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: epcmd2.c,v 1.4.2.13 2001/10/25 08:26:02 richter Exp $
  +#   $Id: epcmd2.c,v 1.4.2.14 2001/10/29 20:07:12 richter Exp $
   #
   
###################################################################################*/
   
  @@ -68,13 +68,13 @@
   
        if (bEqual)
            {
  -         Element_selfSetAttribut (pDomTree, pNode, nRepeatLevel, sAttrName, 
nAttrLen, NULL, 0, 1) ;
  +         Element_selfSetAttribut (pDomTree, pNode, nRepeatLevel, sAttrName, 
nAttrLen, NULL, 0) ;
            if (r -> bDebug & dbgInput)
                lprintf (r, "[%d]INPU: Set Attribut: Name: '%*.*s' Value: '%*.*s' 
Attribute: '%*.*s'\n", r -> nPid, nNameLen, nNameLen, pName, nValLen, nValLen, pVal, 
nAttrLen, nAttrLen, sAttrName) ; 
               }
        else
            {
  -         Element_selfRemoveAttribut (pDomTree, pNode, nRepeatLevel, sAttrName, 
nAttrLen, 1) ;
  +         Element_selfRemoveAttribut (pDomTree, pNode, nRepeatLevel, sAttrName, 
nAttrLen) ;
            if (r -> bDebug & dbgInput)
                lprintf (r, "[%d]INPU: Remove Attribut: Name: '%*.*s' Value: '%*.*s' 
Attribute: '%*.*s'\n", r -> nPid, nNameLen, nNameLen, pName, nValLen, nValLen, pVal, 
nAttrLen, nAttrLen, sAttrName ) ; 
            }
  @@ -86,23 +86,13 @@
            hv_store (pCurrReq -> pInputHash, (char *)pName, nNameLen, newSVpv 
((nValLen?((char *)pVal):""), nValLen), 0) ;
            if (r -> bDebug & dbgInput)
                lprintf (r, "[%d]INPU: Has already Attribut: Name: '%*.*s' Value: 
'%*.*s' Attribute: '%*.*s'\n", r -> nPid, nNameLen, nNameLen, pName, nValLen, nValLen, 
pVal, nAttrLen, nAttrLen, sAttrName ) ; 
  -         if ((pNode -> bFlags & (nflgModified | nflgReturn)) ==  (nflgModified | 
nflgReturn) && !bSetInSource) 
  -             Element_selfRemoveAttribut (pDomTree, pNode, nRepeatLevel, sAttrName, 
nAttrLen, 1) ;
            }
        else
            {
            if (r -> bDebug & dbgInput)
                lprintf (r, "[%d]INPU: No value in %%fdat for Attribut: Name: '%*.*s' 
Value: '%*.*s' Attribute: '%*.*s'\n", r -> nPid, nNameLen, nNameLen, pName, nValLen, 
nValLen, pVal, nAttrLen, nAttrLen, sAttrName ) ; 
  -         if ((pNode -> bFlags & (nflgModified | nflgReturn)) ==  (nflgModified | 
nflgReturn) && bSetInSource) 
  -             Element_selfSetAttribut (pDomTree, pNode, nRepeatLevel, sAttrName, 
nAttrLen, NULL, 0, 1) ;
  -
               }
   
  -     if ((pNode -> bFlags & nflgModified) == 0)
  -         {
  -         pNode = Node_selfCondCloneNode (pDomTree, pNode, nRepeatLevel) ;
  -         pNode -> bFlags |= nflgModified | nflgReturn ; /* don't modifiy attribute 
again, for example in another loop iteration */
  -         }
        }
       }
   
  @@ -189,16 +179,8 @@
       EPENTRY (CmdHidden) ;
   
       pNode = Node_selfCondCloneNode (pDomTree, Node_selfLevel (pDomTree, xNode, 
nRepeatLevel), nRepeatLevel) ;
  -
  -    if ((pNode -> bFlags & nflgModified))
  -     {
  -     pNode -> bFlags |= nflgReturn | nflgModified ;
  -     pNewNode = Node_selfCloneNode (pDomTree, pNode, nRepeatLevel, 0) ;
  -     }
  -    else
  -     pNewNode = pNode ;
   
  -    pNewNode -> bFlags |= nflgReturn | nflgModified ;
  +    pNewNode = pNode ;
   
       sArgs = _ep_strdup (r, sArg) ;
       if (sArgs && *sArgs != '\0')
  @@ -359,7 +341,7 @@
        int f = AvFILL(pAV)  ;
           tNode xNode ;
   
  -        xOldChild = Node_replaceChildWithCDATA (DomTree_self(xDomTree), xOldChild, 
nRepeatLevel, "", 0, 4, nflgModified | nflgReturn) ;
  +        xOldChild = Node_replaceChildWithCDATA (DomTree_self(xDomTree), xOldChild, 
nRepeatLevel, "", 0, 4, 0) ;
   
        for (i = 0; i <= f; i++)
            {
  @@ -389,7 +371,7 @@
           int         i = 0 ;
        I32         l32 ;
   
  -        xOldChild = Node_replaceChildWithCDATA (DomTree_self(xDomTree), xOldChild, 
nRepeatLevel, "", 0, 4, nflgModified | nflgReturn) ;
  +        xOldChild = Node_replaceChildWithCDATA (DomTree_self(xDomTree), xOldChild, 
nRepeatLevel, "", 0, 4, 0) ;
   
        hv_iterinit (pHV) ;
        while (pEntry = hv_iternext (pHV))
  @@ -416,7 +398,7 @@
       else
           {
           char * s = SV2String (sText, l) ;
  -        Node_replaceChildWithCDATA (DomTree_self(xDomTree), xOldChild, 
nRepeatLevel, s, l, (pCurrReq -> nCurrEscMode & 3) == 3?2 + (pCurrReq -> nCurrEscMode 
& 4):pCurrReq -> nCurrEscMode, nflgModified | nflgReturn) ;
  +        Node_replaceChildWithCDATA (DomTree_self(xDomTree), xOldChild, 
nRepeatLevel, s, l, (pCurrReq -> nCurrEscMode & 3) == 3?2 + (pCurrReq -> nCurrEscMode 
& 4):pCurrReq -> nCurrEscMode, 0) ;
           }
   
       pCurrReq -> nCurrEscMode = pCurrReq -> nEscMode ;
  
  
  
  1.4.2.63  +1 -3      embperl/Attic/epcomp.c
  
  Index: epcomp.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epcomp.c,v
  retrieving revision 1.4.2.62
  retrieving revision 1.4.2.63
  diff -u -r1.4.2.62 -r1.4.2.63
  --- epcomp.c  2001/10/25 08:26:02     1.4.2.62
  +++ epcomp.c  2001/10/29 20:07:12     1.4.2.63
  @@ -9,7 +9,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: epcomp.c,v 1.4.2.62 2001/10/25 08:26:02 richter Exp $
  +#   $Id: epcomp.c,v 1.4.2.63 2001/10/29 20:07:12 richter Exp $
   #
   
###################################################################################*/
   
  @@ -1090,7 +1090,6 @@
        int l ;
        char buf [80] ;
   
  -     pNode -> bFlags |= nflgCheckpoint ;
        nCheckpointArrayOffset = ArrayAdd (&pDomTree -> pCheckpoints, 1) ;
        pDomTree -> pCheckpoints[nCheckpointArrayOffset].xNode = pNode -> xNdx ;
        *bCheckpointPending = 0 ;
  @@ -1356,7 +1355,6 @@
        int l ;
        char buf [80] ;
        
  -     pNode -> bFlags |= nflgCheckpoint ;
        nCheckpointArrayOffset = ArrayAdd (&pDomTree -> pCheckpoints, 1) ;
        pDomTree -> pCheckpoints[nCheckpointArrayOffset].xNode = xNode ;
        *bCheckpointPending = 0 ;
  
  
  
  1.4.2.61  +202 -201  embperl/Attic/epdom.c
  
  Index: epdom.c
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epdom.c,v
  retrieving revision 1.4.2.60
  retrieving revision 1.4.2.61
  diff -u -r1.4.2.60 -r1.4.2.61
  --- epdom.c   2001/10/28 19:29:52     1.4.2.60
  +++ epdom.c   2001/10/29 20:07:12     1.4.2.61
  @@ -9,7 +9,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: epdom.c,v 1.4.2.60 2001/10/28 19:29:52 richter Exp $
  +#   $Id: epdom.c,v 1.4.2.61 2001/10/29 20:07:12 richter Exp $
   #
   
###################################################################################*/
   
  @@ -761,39 +761,9 @@
   
   
   
  -tNodeData * Node_selfLevelItem (/*in*/ tDomTree *    pDomTree,
  -                             /*in*/ tNode         xNode,
  -                             /*in*/ tRepeatLevel  nLevel)
   
  -    {
  -    tRepeatLevelLookup * pLookupLevelNode  ;
   
  -    pLookupLevelNode = pDomTree -> pLookup[xNode].pLookupLevel ;
  -    if (pLookupLevelNode)
  -     {
  -     register tRepeatLevelLookupItem * pLookupLevelNodeLevel = &pLookupLevelNode -> 
items[nLevel & pLookupLevelNode -> nMask] ;
  -     register tNodeData *              pLnNode               = 
pLookupLevelNodeLevel -> pNode ;
  -     if (!pLnNode)
  -         return ((struct tNodeData *)(DomTree_self(pDomTree -> xSourceNdx) -> 
pLookup[xNode].pLookup)) ;
  -     if (pLnNode -> nRepeatLevel == nLevel)
  -         return pLnNode ;
  -     while (pLookupLevelNodeLevel = pLookupLevelNodeLevel -> pNext)
  -         {
  -         pLnNode = pLookupLevelNodeLevel -> pNode ;
  -         if (pLnNode -> nRepeatLevel == nLevel)
  -             return pLnNode ;
  -         }
  -     }
  -    
  -    
  -    return ((struct tNodeData *)(DomTree_self(pDomTree -> xSourceNdx) -> 
pLookup[xNode].pLookup)) ;
  -    }
   
  -
  -
  -
  -
  -
   /* ------------------------------------------------------------------------ */
   /*                                                                          */
   /* DomInit                                                                  */
  @@ -905,6 +875,7 @@
   
       pDomTree -> pDomTreeSV = pSV ;
       pDomTree -> xNdx = n ;
  +    pDomTree -> xSourceNdx = n ;
   
   
       return pDomTree ;
  @@ -1085,7 +1056,7 @@
        {
        tAttrData * pAttr; 
        pDocument = Node_selfCloneNode (pDomTree, pDocument, 0, 1) ;
  -     pAttr = Element_selfSetAttribut (pDomTree, pDocument, 0, NULL, xDomTreeAttr, 
NULL, pDomTree -> xNdx, 0) ;
  +     pAttr = Element_selfSetAttribut (pDomTree, pDocument, 0, NULL, xDomTreeAttr, 
NULL, pDomTree -> xNdx) ;
        pAttr -> bFlags = aflgOK ; /* reset string value flag */
        pDomTree -> xDocument = pDocument -> xNdx ;
        pDocument -> nType = ntypDocumentFraq ;
  @@ -1184,7 +1155,7 @@
               pPrevNode -> bFlags |= nflgIgnore ;
               }
   
  -        if (pCompileParent == pRunParent)
  +        if (pCompileParent  -> xNdx == pRunParent -> xNdx )
               {
               pRunNode = Node_selfCondCloneNode (pDomTree, pRunNode, r -> 
nCurrRepeatLevel) ;
           
  @@ -1221,7 +1192,7 @@
                            pRunNode -> xNdx,  xNode_selfLevelNull(pDomTree,pRunNode), 
                            pRunNode -> nLinenumber, sv_count) ; 
                }
  -            else if (pCompileParent2 == pRunParent2)
  +            else if (pCompileParent2 -> xNdx == pRunParent2 -> xNdx )
                   {
                if (pRunParent -> nType != ntypAttr && pCompileParent -> nType != 
ntypAttr) 
                    {
  @@ -1505,7 +1476,71 @@
   
   */
   
  +/* ------------------------------------------------------------------------ */
  +/*                                                                          */
  +/* Node_selfLevelItem                                                            */
  +/*                                                                          */
  +/*! 
  +*   \_en
  +*   returns the node with index xNode and repeat level nLevel. If there is
  +*   node node in this repeat level, the node from the source DomTree with
  +*   level zero is returned
  +*   
  +*   @param  pDomTree     current DomTree we are working on              
  +*   @param  xNode           node index
  +*   @param  nRepeatLevel    repeat level
  +*
  +*   @note   Don't use this function directly, use the macro Node_selfLevel
  +*   \endif                                                                       
  +*
  +*   \_de                                                                        
  +*   Liefert den Node mit dem Index xNode und dem RepeatLevel nLevel. Wenn
  +*   dieser nicht existiert wird der Node mit Index Null aus dem Source
  +*   DomTree zur�ck geliefert
  +*
  +*   @param  pDomTree     DomTree der den Node enth�lt              
  +*   @param  pNode           Node Index
  +*   @param  nRepeatLevel    RepeatLevel
  +*
  +*   @note   Dieser Funtkion sollte nicht direkt aufgerufen werden, sondern
  +*        das Makro Node_selfLevel
  +*   \endif                                                                       
  +*                                                                          
  +* ------------------------------------------------------------------------ */
  +
  +
   
  +tNodeData * Node_selfLevelItem (/*in*/ tDomTree *    pDomTree,
  +                             /*in*/ tNode         xNode,
  +                             /*in*/ tRepeatLevel  nLevel)
  +
  +    {
  +    tRepeatLevelLookup * pLookupLevelNode  ;
  +
  +    pLookupLevelNode = pDomTree -> pLookup[xNode].pLookupLevel ;
  +    if (pLookupLevelNode)
  +     {
  +     register tRepeatLevelLookupItem * pLookupLevelNodeLevel = &pLookupLevelNode -> 
items[nLevel & pLookupLevelNode -> nMask] ;
  +     register tNodeData *              pLnNode               = 
pLookupLevelNodeLevel -> pNode ;
  +     if (!pLnNode)
  +         return ((struct tNodeData *)(DomTree_self(pDomTree -> xSourceNdx) -> 
pLookup[xNode].pLookup)) ;
  +     if (pLnNode -> nRepeatLevel == nLevel)
  +         return pLnNode ;
  +     while (pLookupLevelNodeLevel = pLookupLevelNodeLevel -> pNext)
  +         {
  +         pLnNode = pLookupLevelNodeLevel -> pNode ;
  +         if (pLnNode -> nRepeatLevel == nLevel)
  +             return pLnNode ;
  +         }
  +     }
  +    
  +    
  +    return ((struct tNodeData *)(DomTree_self(pDomTree -> xSourceNdx) -> 
pLookup[xNode].pLookup)) ;
  +    }
  +
  +
  +
  +
   /* ------------------------------------------------------------------------ */
   /*                                                                          */
   /* Node_cloneNode                                                           */
  @@ -1558,7 +1593,6 @@
       pDomTree -> pLookup[xNewNode].pLookup    = pNew ;
       pDomTree -> pLookup[xNewNode].pLookupLevel       = NULL ;
       pNew -> xNdx     = xNewNode ;
  -    pNew -> bFlags      &= ~nflgModified ;
       pNew -> xDomTree    = pDomTree -> xNdx ;
       pNew -> nRepeatLevel    = nRepeatLevel ;
   
  @@ -1714,7 +1748,6 @@
       
           memcpy (pNew, pNode, len) ;
   
  -        pNew -> bFlags      &= ~nflgModified ;
           pNew -> xDomTree    = pDomTree -> xNdx ;
   
           if (pNew -> nText)
  @@ -1851,8 +1884,10 @@
   
       if (xChilds)
           { /* --- attribute has already childs, get the first and last one --- */
  -     tNodeData * pFirstChild = Node_self (pDomTree, xChilds) ;
  -        tNodeData * pLastChild  = Node_self (pDomTree, pFirstChild -> xPrev) ;
  +     tNodeData * pFirstChild = Node_selfLevel (pDomTree, xChilds, nRepeatLevel) ;
  +        tNodeData * pLastChild  = Node_selfLevel (pDomTree, pFirstChild -> xPrev, 
nRepeatLevel) ;
  +     pFirstChild = Node_selfCondCloneNode (pDomTree, pFirstChild, nRepeatLevel) ;
  +     pLastChild = Node_selfCondCloneNode (pDomTree, pLastChild, nRepeatLevel) ;
   
           pNewChild -> xNext      = pFirstChild -> xNdx ;    
           pNewChild -> xPrev      = pLastChild -> xNdx ;    
  @@ -1877,15 +1912,35 @@
   /* ------------------------------------------------------------------------ */
   /*                                                                          */
   /* Node_selfExpand                                                          */
  -/*                                                                          */
  -/* Expand a node to hold more attributes                                    */
  -/*                                                                          */
  -/*  pNode    Node to expand                                              */
  -/*  numOldAttr       number of Attributes in the old node that must be relocated */
  -/*              (-1 to take form pNode)                                     */
  -/*  numNewAttr  new number of attributes                                    */
   /*                                                                          */
  -/* ------------------------------------------------------------------------ */
  +/*!
  +*   \_en
  +*   Expand a node to hold more attributes
  +*   
  +*   @param  pNode        Node to expand
  +*   @param  numOldAttr           number of Attributes in the old node that must
  +*                        be relocated (-1 to take form pNode)
  +*   @param  numNewAttr           new number of attributes
  +*   @return              The node with space for numNewAttr
  +*
  +*   @warning The node may have a new memory address after this function
  +*   \endif                                                                       
  +*
  +*   \_de                                                                        
  +*   Expandiert einen Node um mehr Attribute aufzunehmen
  +*   
  +*   @param  pNode        Node der expandiert werden soll
  +*   @param  numOldAttr           Anzahl der Attribute die Relokiert werden m�ssen
  +*                        (-1 um alle Attribute zu relokieren)
  +*   @param  numNewAttr           Neue Anzahl der Attribute
  +*   @return              Den Node mit platz f�r numNewAttr
  +*
  +*   @warning Der Node liegt nach dem Aufruf dieser Funktion u.U. an 
  +*            anderen Speicheradresse
  +*   \endif                                                                       
  +*                                                                          
  +* ------------------------------------------------------------------------ */
  +
   
   
   
  @@ -1904,14 +1959,34 @@
   
       if (pNewChild != pNode)
        {
  -     tAttrData * pAttr = ((struct tAttrData * )(pNewChild + 1))  ;
  -     tLookupItem * pLookup = pDomTree -> pLookup ;
  +     tAttrData *         pAttr           = ((struct tAttrData * )(pNewChild + 1))  ;
  +     tLookupItem *       pLookup         = pDomTree -> pLookup ;
  +     tRepeatLevelLookup *pLookupLevelNode= pLookup[xNdx].pLookupLevel ; 
   
        if (numOldAttr == (tUInt16) -1)
            numOldAttr = pNewChild -> numAttr ;
   
        pLookup[xNdx].pLookup = pNewChild ;
  -     pLookup[xNdx].pLookupLevel = NULL ;
  +     if (pLookupLevelNode)
  +         {
  +         tRepeatLevel nLevel = pNewChild -> nRepeatLevel ;
  +         register tRepeatLevelLookupItem * pLookupLevelNodeLevel     = 
&pLookupLevelNode -> items[nLevel & pLookupLevelNode -> nMask] ;
  +         register tNodeData *              pLnNode           = 
pLookupLevelNodeLevel -> pNode ;
  +         if (pLnNode && pLnNode -> nRepeatLevel == nLevel)
  +             pLookupLevelNodeLevel -> pNode = pNewChild ;
  +         else
  +             {
  +             while (pLookupLevelNodeLevel = pLookupLevelNodeLevel -> pNext)
  +                 {
  +                 pLnNode = pLookupLevelNodeLevel -> pNode ;
  +                 if (pLnNode -> nRepeatLevel == nLevel)
  +                     {
  +                     pLookupLevelNodeLevel -> pNode = pNewChild ;
  +                     break ;
  +                     }
  +                 }
  +             }
  +         }    
   
        while (numOldAttr--)
            {
  @@ -1919,6 +1994,8 @@
            pLookup[pAttr -> xNdx].pLookupLevel = NULL ;
            pAttr++ ; 
            }
  +     
  +     
        }
      
       return pNewChild ;
  @@ -1950,7 +2027,7 @@
       tNodeData *      pParent;
       tIndex   xText ;
   
  -    pParent = Node_selfLevel (pDomTree, xParent, nRepeatLevel) ;
  +    pParent = Node_self (pDomTree, xParent) ;
   
       /* --- clone node if it doesn't live in the current DomTree -- */
       if (pParent)
  @@ -1960,13 +2037,11 @@
            tNodeData * pNode = Attr_selfNode (((tAttrData *)pParent)) ;
   
            pNode = Node_selfCondCloneNode (pDomTree, pNode, nRepeatLevel) ;
  -         
  -         pParent = Node_selfLevel (pDomTree, xParent, nRepeatLevel) ;
  +         pParent = Node_self (pDomTree, xParent) ; /* relookup in case of node move 
*/
            }
        else
            {
  -         if (pParent -> xDomTree != pDomTree -> xNdx)
  -             pParent = Node_selfCondCloneNode (pDomTree, pParent, nRepeatLevel) ;
  +         pParent = Node_selfCondCloneNode (pDomTree, pParent, nRepeatLevel) ;
            }
        }
       
  @@ -2239,86 +2314,72 @@
                                    /*in*/ tRepeatLevel    nOldRepeatLevel)
   
       {
  -    int              bFlags = nflgModified | nflgReturn ;
       tNode    xOrgChild  = xOldChild ;
       tNodeData *      pNode      = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
  -    tNodeData *      pOldChild  ;
  -    
  -    pOldChild  = Node_selfCondCloneNode (pOldChildDomTree, Node_selfLevel 
(pOldChildDomTree, xOldChild, nOldRepeatLevel), nOldRepeatLevel) ; 
  -
  -    if (pOldChild -> bFlags & nflgModified) 
  -     {
  -     pOldChild -> bFlags |= bFlags ;
  -     pOldChild = Node_selfCloneNode (pOldChildDomTree, pNode, nOldRepeatLevel, 1) ;
  -     xOldChild = pOldChild -> xNdx ;
  -     }
  -    else
  -     {
  -     int         len  = sizeof (tNodeData) + pNode -> numAttr * sizeof (tAttrData) 
; 
  -     int         numAttr = pOldChild -> numAttr ;
  -     int         nOffset ;
  -     tAttrData * pAttr  ;
  -     int         n      ;
  -     tLookupItem * pLookup  ;
  +    tNodeData *      pOldChild   = Node_selfCondCloneNode (pOldChildDomTree, 
Node_selfLevel (pOldChildDomTree, xOldChild, nOldRepeatLevel), nOldRepeatLevel) ; 
  +    int          len  = sizeof (tNodeData) + pNode -> numAttr * sizeof (tAttrData) 
; 
  +    int          numAttr = pOldChild -> numAttr ;
  +    int          nOffset ;
  +    tAttrData * pAttr  ;
  +    int         n      ;
  +    tLookupItem * pLookup  ;
   
        
  -        pOldChild  = Node_selfExpand (pOldChildDomTree, pOldChild, 0, pNode -> 
numAttr) ;
  -        
  -     if (pOldChild -> nText)
  -         NdxStringFree (pOldChild -> nText) ;
  +    pOldChild  = Node_selfExpand (pOldChildDomTree, pOldChild, 0, pNode -> numAttr) 
;
  +    
  +    if (pOldChild -> nText)
  +     NdxStringFree (pOldChild -> nText) ;
   
  -     pAttr = ((struct tAttrData * )(pOldChild + 1))  ;
  -     n     = pOldChild -> numAttr ;
  +    pAttr = ((struct tAttrData * )(pOldChild + 1))  ;
  +    n     = pOldChild -> numAttr ;
   
  -     while (n > 0)
  -         {
  -         if (pAttr -> xName)
  -             NdxStringFree (pAttr -> xName) ;
  -         if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
  -             NdxStringFree  (pAttr -> xValue) ;
  -         n-- ;
  -         pAttr++ ;
  -         }
  +    while (n > 0)
  +     {
  +     if (pAttr -> xName)
  +         NdxStringFree (pAttr -> xName) ;
  +     if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
  +         NdxStringFree  (pAttr -> xValue) ;
  +     n-- ;
  +     pAttr++ ;
  +     }
   
  -     memcpy (pOldChild, pNode, len) ;
  +    memcpy (pOldChild, pNode, len) ;
   
  -     if (pOldChild -> nText)
  -         NdxStringRefcntInc (pOldChild -> nText) ;
  -     
  +    if (pOldChild -> nText)
  +     NdxStringRefcntInc (pOldChild -> nText) ;
  +    
   
  -     pOldChild -> xDomTree = pDomTree -> xNdx ;
  -     pOldChild -> xNdx       = xOldChild ;
  -     pOldChild -> bFlags |= bFlags ;
  +    pOldChild -> xDomTree = pDomTree -> xNdx ;
  +    pOldChild -> xNdx       = xOldChild ;
   
  -     pAttr = ((struct tAttrData * )(pOldChild + 1))  ;
  -     n     = pNode -> numAttr ;
  -     pLookup = pDomTree -> pLookup ;
  +    pAttr = ((struct tAttrData * )(pOldChild + 1))  ;
  +    n     = pNode -> numAttr ;
  +    pLookup = pDomTree -> pLookup ;
   
   
  -     while (n > 0)
  -         {
  -         if (pAttr -> xName)
  -             NdxStringRefcntInc (pAttr -> xName) ;
  -         if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
  -             NdxStringRefcntInc  (pAttr -> xValue) ;
  -         pLookup[pAttr -> xNdx].pLookup = pAttr ;
  -         n-- ;
  -         pAttr++ ;
  -         }
  -     
  -     pAttr = ((struct tAttrData * )(pOldChild + 1)) + pOldChild -> numAttr ;
  -     n     = numAttr - pNode -> numAttr ;
  +    while (n > 0)
  +     {
  +     if (pAttr -> xName)
  +         NdxStringRefcntInc (pAttr -> xName) ;
  +     if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
  +         NdxStringRefcntInc  (pAttr -> xValue) ;
  +     pLookup[pAttr -> xNdx].pLookup = pAttr ;
  +     n-- ;
  +     pAttr++ ;
  +     }
  +    
  +    pAttr = ((struct tAttrData * )(pOldChild + 1)) + pOldChild -> numAttr ;
  +    n     = numAttr - pNode -> numAttr ;
   
  -     while (n > 0)
  -         {
  -         pAttr -> bFlags = nflgDeleted ;
  -         if (pAttr -> xName)
  -             NdxStringFree (pAttr -> xName) ;
  -         if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
  -             NdxStringFree (pAttr -> xValue) ;
  -         n-- ;
  -         pAttr++ ;
  -         }
  +    while (n > 0)
  +     {
  +     pAttr -> bFlags = nflgDeleted ;
  +     if (pAttr -> xName)
  +         NdxStringFree (pAttr -> xName) ;
  +     if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
  +         NdxStringFree (pAttr -> xValue) ;
  +     n-- ;
  +     pAttr++ ;
        }
   
       if (pOldChild -> nType == ntypDocument)
  @@ -2334,7 +2395,7 @@
   
       if (pOldChild -> nType == ntypDocumentFraq)
        {
  -     tAttrData * pAttr = Element_selfSetAttribut (pOldChildDomTree, pOldChild, 
nOldRepeatLevel, NULL, xDomTreeAttr, NULL, pDomTree -> xNdx, 0) ;
  +     tAttrData * pAttr = Element_selfSetAttribut (pOldChildDomTree, pOldChild, 
nOldRepeatLevel, NULL, xDomTreeAttr, NULL, pDomTree -> xNdx) ;
        pAttr -> bFlags = aflgOK ; /* reset string value flag */
        }
        
  @@ -2365,7 +2426,6 @@
                                    /*in*/ tRepeatLevel    nRefRepeatLevel)
   
       {
  -    int              bFlags = nflgModified | nflgReturn ;
       tNodeData *      pNewNode      = Node_selfLevel (pNewNodeDomTree, xNewNode, 
nNewRepeatLevel) ;
       tNodeData *      pRefNode      = Node_selfLevel (pRefNodeDomTree, xRefNode, 
nRefRepeatLevel) ;
       tNodeData *      pNxtNode      = Node_selfNextSibling (pRefNodeDomTree, 
pRefNode, nRefRepeatLevel) ;
  @@ -2379,7 +2439,7 @@
           pNew -> nText   = pNewNode -> nText ;
           pNew -> xChilds = pNewNode -> xChilds ;
           pNew -> nType   = pNewNode -> nType ;
  -        pNew -> bFlags  = pNewNode -> bFlags | nflgModified | nflgReturn ;
  +        pNew -> bFlags  = pNewNode -> bFlags  ;
           
           if (pNew -> nText)
            NdxStringRefcntInc (pNew -> nText) ;
  @@ -2392,16 +2452,11 @@
       else
           pNxtNode = Node_selfLevel (pRefNodeDomTree, pRefNode -> xNext, 
nRefRepeatLevel) ; /* first one */
   
  -    if ((pNxtNode -> bFlags & nflgModified) == 0)
  -     {
  -     xOrgNode = pNewNode -> xNdx ;
  -     pNxtNode -> xPrev = pNewNode -> xNdx ;
  -     pRefNode -> xNext = pNewNode -> xNdx ;
  -     pNewNode -> xPrev = pRefNode -> xNdx ;
  -     pNewNode -> xNext = pNxtNode -> xNdx ;
  -     }
  -    else
  -     xOrgNode = pNxtNode -> xNdx ;
  +    xOrgNode = pNewNode -> xNdx ;
  +    pNxtNode -> xPrev = pNewNode -> xNdx ;
  +    pRefNode -> xNext = pNewNode -> xNdx ;
  +    pNewNode -> xPrev = pRefNode -> xNdx ;
  +    pNewNode -> xNext = pNxtNode -> xNdx ;
   
       if (pNewNode -> nType == ntypDocument)
           {
  @@ -2416,7 +2471,7 @@
   
       if (pNewNode -> nType == ntypDocumentFraq)
        {
  -     tAttrData * pAttr = Element_selfSetAttribut (pRefNodeDomTree, pNewNode, 
nRefRepeatLevel, NULL, xDomTreeAttr, NULL, pNewNodeDomTree -> xNdx, 0) ;
  +     tAttrData * pAttr = Element_selfSetAttribut (pRefNodeDomTree, pNewNode, 
nRefRepeatLevel, NULL, xDomTreeAttr, NULL, pNewNodeDomTree -> xNdx) ;
        pAttr -> bFlags = aflgOK ; /* reset string value flag */
        }
   
  @@ -2469,16 +2524,11 @@
           pNxtNode  = Node_selfCondCloneNode (pRefNodeDomTree, pNxtNode, 
nRefRepeatLevel) ; 
       else
           pNxtNode = Node_selfLevel (pRefNodeDomTree, pRefNode -> xNext, 
nRefRepeatLevel) ; /* first one */
  -
  -    /* if ((pNxtNode -> bFlags & nflgModified) == 0) */
  -     {
  -     pNxtNode -> xPrev = pNew -> xNdx ;
  -     pRefNode -> xNext = pNew -> xNdx ;
  -     pNew -> xPrev = pRefNode -> xNdx ;
  -     pNew -> xNext = pNxtNode -> xNdx ;
  -     }
   
  -    /* DomTree_selfCheckpoint (pRefNodeDomTree, xRefNode, pNew -> xNdx) ; */
  +    pNxtNode -> xPrev = pNew -> xNdx ;
  +    pRefNode -> xNext = pNew -> xNdx ;
  +    pNew -> xPrev = pRefNode -> xNdx ;
  +    pNew -> xNext = pNxtNode -> xNdx ;
   
       return pNew -> xNdx ;
       }
  @@ -2794,7 +2844,7 @@
       tNodeData * pNode = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
       
       
  -    if (pNode -> nRepeatLevel)
  +    if (pNode -> nType != ntypAttr && pNode -> nRepeatLevel)
           nRepeatLevel = pNode -> nRepeatLevel ;
       
       if (pNode -> nType == ntypDocumentFraq)
  @@ -3204,8 +3254,7 @@
                                      /*in*/ const char *       sAttrName,
                                      /*in*/ int                nAttrNameLen,
                                      /*in*/ const char *       sNewValue, 
  -                                   /*in*/ int                nNewValueLen,
  -                                   /*in*/ int                bClone)
  +                                   /*in*/ int                nNewValueLen) 
   
       {
       tAttrData * pAttr ;
  @@ -3220,17 +3269,6 @@
        tIndex xValue = sNewValue?String2NdxNoInc (sNewValue, 
nNewValueLen):nNewValueLen ;
        NdxStringRefcntInc (xValue) ;
   
  -     if (bClone)
  -         {
  -         if (pAttr -> xValue != xValue && (pNode -> bFlags & nflgModified))
  -             {
  -             pNewNode = Node_selfCloneNode (pDomTree, pNode, nRepeatLevel, 1) ;
  -             pAttr = Element_selfGetAttribut (pDomTree, pNewNode, sAttrName, 
nAttrNameLen) ;
  -             }
  -
  -         pNode -> bFlags |= nflgReturn | nflgModified ;
  -         }
  -
        if (pAttr -> xValue && (pAttr -> bFlags & aflgAttrValue))
            NdxStringFree (pAttr -> xValue) ;
   
  @@ -3238,10 +3276,7 @@
        return pAttr ;
        }
   
  -    if ((pNode -> bFlags & nflgModified) && bClone)
  -     pNewNode = Node_selfCloneNode (pDomTree, pNode, nRepeatLevel, 1) ;
  -    else
  -     pNewNode = pNode ;
  +    pNewNode = pNode ;
   
       
       xAttr = Node_appendChild (pDomTree, pNewNode -> xNdx, nRepeatLevel, ntypAttr, 
0, sAttrName, nAttrNameLen, 0, pNewNode -> nLinenumber, NULL) ;
  @@ -3263,25 +3298,13 @@
   tAttrData *  Element_selfRemoveAttributPtr (/*in*/ tDomTree *                
pDomTree,
                                      /*in*/ struct tNodeData * pNode,
                                      /*in*/ tRepeatLevel       nRepeatLevel,
  -                                   /*in*/ tAttrData *        pAttr,
  -                                   /*in*/ int                bClone)
  +                                   /*in*/ tAttrData *        pAttr)
   
       {
       tNodeData * pNewNode ;
       
       pNode = Node_selfCondCloneNode (pDomTree, pNode, nRepeatLevel) ;
   
  -    if (bClone)
  -     {
  -     if (pAttr != NULL && (pNode -> bFlags & nflgModified))
  -         {
  -         pNode -> bFlags |= nflgReturn | nflgModified ;
  -
  -         pNewNode = Node_selfCloneNode (pDomTree, pNode, nRepeatLevel, 1) ;
  -         //???? pAttr = Element_selfGetAttribut (pDomTree, pNewNode, sAttrName, 
nAttrNameLen) ;
  -         }
  -     }
  -
       if (pAttr)
        {
        pAttr -> bFlags = 0 ;
  @@ -3319,8 +3342,7 @@
                                      /*in*/ struct tNodeData * pNode,
                                      /*in*/ tRepeatLevel       nRepeatLevel,
                                      /*in*/ const char *       sAttrName,
  -                                   /*in*/ int                nAttrNameLen,
  -                                   /*in*/ int                bClone)
  +                                   /*in*/ int                nAttrNameLen)
   
       {
       tAttrData * pAttr ;
  @@ -3329,7 +3351,7 @@
   
       pAttr = Element_selfGetAttribut (pDomTree, pNode, sAttrName, nAttrNameLen) ;
   
  -    return Element_selfRemoveAttributPtr (pDomTree, pNode, nRepeatLevel, pAttr, 
bClone) ;
  +    return Element_selfRemoveAttributPtr (pDomTree, pNode, nRepeatLevel, pAttr) ;
       }
       
   tAttrData *  Element_selfRemoveNthAttribut (/*in*/ tDomTree *                
pDomTree,
  @@ -3344,7 +3366,7 @@
   
       pAttr = Element_selfGetNthAttribut (pDomTree, pNode, n) ;
   
  -    return Element_selfRemoveAttributPtr (pDomTree, pNode, nRepeatLevel, pAttr, 0) ;
  +    return Element_selfRemoveAttributPtr (pDomTree, pNode, nRepeatLevel, pAttr) ;
       }
       
   
  @@ -3397,29 +3419,8 @@
        {
        char * s ;
        int    l ;
  -
  -     if (pNode -> bFlags & nflgReturn)
  -         {
  -         tIndex xNdx = pNode -> xNdx ;
  -         tNodeData * pUseNode ;
  -         int i = nCheckpointCache - 2 ;
  -     
  -         i &= nCheckpointCacheMask ;
  -         
  -         while (xCheckpointCache[i] && xCheckpointCache[i] != xNdx)
  -             {
  -             i -= 2 ;
  -             i &= nCheckpointCacheMask ;
  -             }
   
  -         if (xCheckpointCache[i])
  -             xNdx = xCheckpointCache[i+1] ;
  -
  -         pUseNode = Node_self (pDomTree, xNdx) ;
  -         Ndx2StringLen (pUseNode -> nText,s,l) ;
  -         }
  -     else    
  -         Ndx2StringLen (pNode -> nText,s,l) ;
  +     Ndx2StringLen (pNode -> nText,s,l) ;
        StringAdd (ppAttr, s, l) ;
        pNode = Node_selfNextSibling (pDomTree, pNode, nRepeatLevel) ;
        }
  
  
  
  1.4.2.37  +24 -12    embperl/Attic/epdom.h
  
  Index: epdom.h
  ===================================================================
  RCS file: /home/cvs/embperl/Attic/epdom.h,v
  retrieving revision 1.4.2.36
  retrieving revision 1.4.2.37
  diff -u -r1.4.2.36 -r1.4.2.37
  --- epdom.h   2001/10/28 19:29:52     1.4.2.36
  +++ epdom.h   2001/10/29 20:07:12     1.4.2.37
  @@ -9,7 +9,7 @@
   #   IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
   #   WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
   #
  -#   $Id: epdom.h,v 1.4.2.36 2001/10/28 19:29:52 richter Exp $
  +#   $Id: epdom.h,v 1.4.2.37 2001/10/29 20:07:12 richter Exp $
   #
   
###################################################################################*/
   
  @@ -136,9 +136,6 @@
       nflgEscUrl      = 2,
       nflgEscChar          = 4,
       nflgIgnore      = 8,
  -    nflgModified    = 16,
  -    nflgCheckpoint  = 32,
  -    nflgReturn      = 64,
       nflgSubCheckpoint= 128
       } ;
   
  @@ -365,8 +362,26 @@
   #define DomTree_self(xDomTree)                   (&pDomTrees[xDomTree]) 
   
   #define Node_self(pDomTree,xNode)        ((struct tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup))
  -#define Node_selfLevel(pDomTree,xNode,nLevel)  (pDomTree -> 
pLookup[xNode].pLookup?((((struct tNodeData *)(pDomTree -> pLookup[xNode].pLookup)) -> 
nRepeatLevel == nLevel || pDomTree -> pLookup[xNode].pLookupLevel == NULL)?((struct 
tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)):Node_selfLevelItem(pDomTree,xNode,nLevel)):NULL)
  -#define Node_selfNotNullLevel(pDomTree,xNode,nLevel)  (pDomTree -> 
pLookup[xNode].pLookup?((((struct tNodeData *)(pDomTree -> pLookup[xNode].pLookup)) -> 
nRepeatLevel == nLevel || ((struct tNodeData *)(pDomTree -> pLookup[xNode].pLookup)) 
-> nRepeatLevel !=  0 || pDomTree -> pLookup[xNode].pLookupLevel == NULL)?((struct 
tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)):Node_selfLevelItem(pDomTree,xNode,nLevel)):NULL)
  +#define Node_selfLevel(pDomTree,xNode,nLevel)  \
  +                         (pDomTree -> pLookup[xNode].pLookup == NULL?NULL:    \
  +                             (((struct tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)) -> nRepeatLevel == nLevel? \
  +                             ((struct tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)): \
  +                             Node_selfLevelItem(pDomTree,xNode,nLevel)))
  +
  +#define Node_selfNotNullLevel(pDomTree,xNode,nLevel) \
  +                         (pDomTree -> pLookup[xNode].pLookup == NULL?NULL:    \
  +                             (((struct tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)) -> xDomTree == pDomTree -> xNdx? \
  +                             ((struct tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)): \
  +                             Node_selfLevelItem(pDomTree,xNode,nLevel)))
  +#if 0
  +                         (pDomTree -> pLookup[xNode].pLookup == ?  \
  +                             ((((struct tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)) -> nRepeatLevel == nLevel || \
  +                             ((struct tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)) -> nRepeatLevel !=  0 || \
  +                             pDomTree -> pLookup[xNode].pLookupLevel == NULL)?   \
  +                                 ((struct tNodeData *)(pDomTree -> 
pLookup[xNode].pLookup)): \
  +                                 Node_selfLevelItem(pDomTree,xNode,nLevel)): \
  +                         NULL)
  +#endif
   
   #define xNode_selfLevelNull(pDomTree,pNode)   ((pDomTree) -> 
pLookup[(pNode)->xNdx].pLookupLevel?(pDomTree) -> pLookup[(pNode)->xNdx].pLookupLevel 
-> xNullNode:(pNode) -> xNdx)
   
  @@ -473,14 +488,12 @@
                                      /*in*/ const char *       sAttrName,
                                      /*in*/ int                nAttrNameLen,
                                      /*in*/ const char *       sNewValue, 
  -                                   /*in*/ int                nNewValueLen,
  -                                   /*in*/ int                bClone) ;
  +                                   /*in*/ int                nNewValueLen) ;
   
   tAttrData *  Element_selfRemoveAttributPtr (/*in*/ tDomTree *                
pDomTree,
                                      /*in*/ struct tNodeData * pNode,
                                      /*in*/ tRepeatLevel       nRepeatLevel,
  -                                   /*in*/ tAttrData *        pAttr,
  -                                   /*in*/ int                bClone) ;
  +                                   /*in*/ tAttrData *        pAttr) ;
   
   tAttrData *  Element_selfRemoveNthAttribut (/*in*/ tDomTree *                
pDomTree,
                                      /*in*/ struct tNodeData * pNode,
  @@ -492,8 +505,7 @@
                                      /*in*/ struct tNodeData * pNode,
                                      /*in*/ tRepeatLevel       nRepeatLevel,
                                      /*in*/ const char *       sAttrName,
  -                                   /*in*/ int                nAttrNameLen,
  -                                   /*in*/ int                bClone) ;
  +                                   /*in*/ int                nAttrNameLen) ;
   
   #define Attr_self(pDomTree,xAttr)        ((struct tAttrData *)(pDomTree -> 
pLookup[xAttr].pLookup))
   #define Attr_selfNode(pAttr)        ((struct tNodeData * )(((tUInt8 *)pAttr) - 
pAttr -> nNodeOffset))
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.3   +2 -2      embperl/test/cmp2/Attic/lists.htm
  
  Index: lists.htm
  ===================================================================
  RCS file: /home/cvs/embperl/test/cmp2/Attic/lists.htm,v
  retrieving revision 1.1.2.2
  retrieving revision 1.1.2.3
  diff -u -r1.1.2.2 -r1.1.2.3
  --- lists.htm 2000/09/14 05:08:31     1.1.2.2
  +++ lists.htm 2001/10/29 20:07:13     1.1.2.3
  @@ -132,9 +132,9 @@
           <option value="C">3</option>
           <option value="C" size=5>3</option>
       
  +        <option selected value="D">4</option>
           <option value="D" selected>4</option>
  -        <option value="D" selected>4</option>
  -        <option value="D" size=5 selected>4</option>
  +        <option value="D" selected size=5>4</option>
       
           <option value="E">5</option>
           <option value="E">5</option>
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.4.6.8   +1 -2      embperl/test/html/table.htm
  
  Index: table.htm
  ===================================================================
  RCS file: /home/cvs/embperl/test/html/table.htm,v
  retrieving revision 1.4.6.7
  retrieving revision 1.4.6.8
  diff -u -r1.4.6.7 -r1.4.6.8
  --- table.htm 2001/10/28 19:29:53     1.4.6.7
  +++ table.htm 2001/10/29 20:07:13     1.4.6.8
  @@ -237,7 +237,7 @@
               </td>
           </tr>
       </table>
  -[#
  +
   [- 
   # build tight loop table with array data, multidimensional 5x6
   @array = sort ("Hello", "World", "2000", "Hello", "World", "2000");
  @@ -251,4 +251,3 @@
   
   </body>
   </html>
  -#]
  \ No newline at end of file
  
  
  

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

Reply via email to