You are viewing a plain text version of this content. The canonical link for it is here.
Posted to embperl-cvs@perl.apache.org by ri...@apache.org on 2001/10/24 16:13:15 UTC
cvs commit: embperl DOM.xs Makefile.PL epdom.c epdom.h
richter 01/10/24 07:13:15
Modified: . Tag: Embperl2c DOM.xs Makefile.PL epdom.c epdom.h
Log:
Embperl 2 - tree structure rewrite
Revision Changes Path
No revision
No revision
1.1.2.16 +15 -15 embperl/DOM.xs
Index: DOM.xs
===================================================================
RCS file: /home/cvs/embperl/DOM.xs,v
retrieving revision 1.1.2.15
retrieving revision 1.1.2.16
diff -u -r1.1.2.15 -r1.1.2.16
--- DOM.xs 2001/10/22 13:52:15 1.1.2.15
+++ DOM.xs 2001/10/24 14:13:14 1.1.2.16
@@ -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.15 2001/10/22 13:52:15 richter Exp $
+# $Id: DOM.xs,v 1.1.2.16 2001/10/24 14:13:14 richter Exp $
#
###################################################################################
@@ -63,7 +63,7 @@
PPCODE:
SvGETMAGIC_P4(sText) ;
s = SV2String (sText, l) ;
- Node_replaceChildWithCDATA (DomTree_self(pDomNode -> xDomTree), pDomNode -> xNode, 0, 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, nflgModified | nflgReturn) ;
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, 0, 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, nflgModified | nflgReturn) ;
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, 0, 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, nflgModified | nflgReturn) ;
pCurrReq -> nCurrEscMode = pCurrReq -> nEscMode ;
pCurrReq -> bEscModeSet = -1 ;
/*SvREFCNT_inc (sText) ;*/
@@ -117,7 +117,7 @@
SV * sRet ;
PPCODE:
SvGETMAGIC_P4(sText) ;
- sRet = Node_replaceChildWithUrlDATA (pDomNode -> xDomTree, pDomNode -> xNode, 0, sText) ;
+ sRet = Node_replaceChildWithUrlDATA (pDomNode -> xDomTree, pDomNode -> xNode, pCurrReq -> nCurrRepeatLevel, sText) ;
ST(0) = sRet ;
XSRETURN(1) ;
@@ -130,7 +130,7 @@
SV * sRet ;
PPCODE:
SvGETMAGIC_P4(sText) ;
- sRet = Node_replaceChildWithUrlDATA (pCurrReq -> xCurrDomTree, xOldChild, 0, sText) ;
+ sRet = Node_replaceChildWithUrlDATA (pCurrReq -> xCurrDomTree, xOldChild, pCurrReq -> nCurrRepeatLevel, sText) ;
ST(0) = sRet ;
XSRETURN(1) ;
@@ -167,7 +167,7 @@
Node_self (pDomTree,pParentNode -> xNode) -> bFlags |= nflgModified | nflgReturn ;
xNewParent = Node_cloneNode (pDomTree, pParentNode -> xNode, 0, 1) ;
DomTree_selfCheckpoint (pDomTree, pParentNode -> xNode, xNewParent) ;
- Node_appendChild (pDomTree, xNewParent, 0, nType, 0, sT, nText, 0, 0, NULL) ;
+ Node_appendChild (pDomTree, xNewParent, pCurrReq -> nCurrRepeatLevel, nType, 0, sT, nText, 0, 0, NULL) ;
void
@@ -184,7 +184,7 @@
Node_self (pDomTree,xParent) -> bFlags |= nflgModified | nflgReturn ;
xNewParent = Node_cloneNode (pDomTree, xParent, 0, 1) ;
DomTree_selfCheckpoint (pDomTree, xParent, xNewParent) ;
- Node_appendChild (pDomTree, xNewParent, 0, nType, 0, sT, nText, 0, 0, NULL) ;
+ Node_appendChild (pDomTree, xNewParent, pCurrReq -> nCurrRepeatLevel, nType, 0, sT, nText, 0, 0, NULL) ;
char *
@@ -195,7 +195,7 @@
PREINIT:
char * sText ;
CODE:
- sText = Node_childsText (DomTree_self (xDomTree), xChild, 0, 0, bDeep) ;
+ sText = Node_childsText (DomTree_self (xDomTree), xChild, pCurrReq -> nCurrRepeatLevel, 0, bDeep) ;
RETVAL = sText?sText:"" ;
OUTPUT:
RETVAL
@@ -252,7 +252,7 @@
pDomTree = DomTree_self (pDomNode -> xDomTree) ;
- Element_selfSetAttribut (pDomTree, Node_self (pDomTree, pDomNode -> xNode), 0, sA, nAttr, sT, nText, 1) ;
+ Element_selfSetAttribut (pDomTree, Node_self (pDomTree, pDomNode -> xNode), pCurrReq -> nCurrRepeatLevel, sA, nAttr, sT, nText, 1) ;
void
@@ -268,7 +268,7 @@
char * sA = SV2String (sAttr, nAttr) ;
tDomTree * pDomTree = DomTree_self (xDomTree) ;
- Element_selfSetAttribut (pDomTree, Node_self (pDomTree, xNode), 0, sA, nAttr, sT, nText, 1) ;
+ Element_selfSetAttribut (pDomTree, Node_self (pDomTree, xNode), pCurrReq -> nCurrRepeatLevel, sA, nAttr, sT, nText, 1) ;
@@ -285,7 +285,7 @@
sA = SV2String (sAttr, nAttr) ;
pDomTree = DomTree_self (pDomNode -> xDomTree) ;
- Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, pDomNode -> xNode), 0, sA, nAttr, 1) ;
+ Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, pDomNode -> xNode), pCurrReq -> nCurrRepeatLevel, sA, nAttr, 1) ;
void
@@ -298,7 +298,7 @@
char * sA = SV2String (sAttr, nAttr) ;
tDomTree * pDomTree = DomTree_self (xDomTree) ;
- Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, xNode), 0, sA, nAttr, 1) ;
+ Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, xNode), pCurrReq -> nCurrRepeatLevel, sA, nAttr, 1) ;
################################################################################
@@ -316,7 +316,7 @@
CODE:
pDomTree = DomTree_self (pAttr -> xDomTree) ;
- Attr_selfValue (pDomTree, Attr_self(pDomTree, pAttr -> xNode), 0, &sAttrText) ;
+ Attr_selfValue (pDomTree, Attr_self(pDomTree, pAttr -> xNode), pCurrReq -> nCurrRepeatLevel, &sAttrText) ;
RETVAL = newSVpv (sAttrText, ArrayGetSize (sAttrText)) ;
StringFree (&sAttrText) ;
OUTPUT:
@@ -331,7 +331,7 @@
tDomTree * pDomTree = DomTree_self (xDomTree) ;
char * sAttrText = NULL ;
- Attr_selfValue (pDomTree, Attr_self(pDomTree, xAttr), 0, &sAttrText) ;
+ Attr_selfValue (pDomTree, Attr_self(pDomTree, xAttr), pCurrReq -> nCurrRepeatLevel, &sAttrText) ;
RETVAL = newSVpv (sAttrText, ArrayGetSize (sAttrText)) ;
StringFree (&sAttrText) ;
OUTPUT:
1.31.4.28 +2 -1 embperl/Makefile.PL
Index: Makefile.PL
===================================================================
RCS file: /home/cvs/embperl/Makefile.PL,v
retrieving revision 1.31.4.27
retrieving revision 1.31.4.28
diff -u -r1.31.4.27 -r1.31.4.28
--- Makefile.PL 2001/10/22 08:05:31 1.31.4.27
+++ Makefile.PL 2001/10/24 14:13:14 1.31.4.28
@@ -3,7 +3,7 @@
#
# (C) 1997-2001 G.Richter (richter@dev.ecos.de) / ECOS
#
-# $Id: Makefile.PL,v 1.31.4.27 2001/10/22 08:05:31 richter Exp $
+# $Id: Makefile.PL,v 1.31.4.28 2001/10/24 14:13:14 richter Exp $
#
@@ -1135,6 +1135,7 @@
'ABSTRACT' => 'Embed Perl code in HTML documents',
'AUTHOR' => 'Gerald Richter <ri...@dev.ecos.de>',
'macro' => $makemacros,
+ $EP2?('depend' => { 'Embperl.x' => ['Embperl.xs', 'DOM.xs', 'CMD.xs', 'Syntax.xs'] }):(),
);
1.4.2.56 +180 -36 embperl/Attic/epdom.c
Index: epdom.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.c,v
retrieving revision 1.4.2.55
retrieving revision 1.4.2.56
diff -u -r1.4.2.55 -r1.4.2.56
--- epdom.c 2001/10/24 10:20:36 1.4.2.55
+++ epdom.c 2001/10/24 14:13:15 1.4.2.56
@@ -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.55 2001/10/24 10:20:36 richter Exp $
+# $Id: epdom.c,v 1.4.2.56 2001/10/24 14:13:15 richter Exp $
#
###################################################################################*/
@@ -678,7 +678,7 @@
tNodeData * Node_selfLevelItem (/*in*/ tDomTree * pDomTree,
- /*in*/ tNode xNode,
+ /*in*/ tNode xNode,
/*in*/ tRepeatLevel nLevel)
{
@@ -1014,31 +1014,31 @@
return pDomTree -> xNdx ;
}
-/***********************************************************************
-*
+/*---------------------------------------------------------------------------
* DomTree_checkpoint
-*/
-/**
+*//*!
+*
* \_en
* Compare checkpoint from programm execution with list build during
* compilation and change the DomTree and repeat level according to the
* programm flow
*
* @param r Embperl request data
-* @param xDomTree current DomTree we are working on
+* @param xDomTree current DomTree we are working on
* @param nRunCheckpoint Number of checkpoint that was just executed
* \endif
+*
* \_de
* Vergeleicht den Checkpoint von der Programmausf�hrung mit dem Checkpoint
* beim Compilieren und �ndert den DomTree entsprechend dem Programmflu� ab
*
* @param r Embperl Requestdaten
-* @param xDomTree akuteller DomTree der bearbeitet wird
+* @param xDomTree akuteller DomTree der bearbeitet wird
* @param nRunCheckpoint Nummer des Checkpoints der gerade abgearbeitet
* wurde
* \endif
*
-******************************************************************************/
+* ------------------------------------------------------------------------ */
void DomTree_checkpoint (tReq * r, tIndex xDomTree, tIndex nRunCheckpoint)
@@ -1124,7 +1124,7 @@
else
{
if (pCurrReq -> bDebug & dbgParse)
- lprintf (pCurrReq, "[%d]Checkpoint: jump forward2 DomTree=%d Index=%d Node=%d,%d,%d Line=%d -> Index=%d Node=%d,%d,%d Line=%d SVs=%d\n", pCurrReq -> nPid, xDomTree, nCompileCheckpoint, pPrevNode -> xNdx, pCompileParent -> xNdx, pCompileParent2 -> xNdx, pPrevNode -> nLinenumber, nRunCheckpoint, pRunNode -> xNdx, pRunParent -> xNdx, pRunParent2 -> xNdx, pRunNode -> nLinenumber, sv_count) ;
+ lprintf (pCurrReq, "[%d]Checkpoint: jump forward2 DomTree=%d Index=%d Node=%d,%d,%d Line=%d -> Index=%d Node=%d,%d,%d Line=%d SVs=%d\n", pCurrReq -> nPid, xDomTree, nCompileCheckpoint, pPrevNode -> xNdx, pCompileParent -> xNdx, pCompileParent2?pCompileParent2 -> xNdx:-1, pPrevNode -> nLinenumber, nRunCheckpoint, pRunNode -> xNdx, pRunParent -> xNdx, pRunParent2?pRunParent2 -> xNdx:-1, pRunNode -> nLinenumber, sv_count) ;
mydie ("Unstrutured forward jump") ;
}
@@ -1159,26 +1159,42 @@
pPrevNode -> bFlags |= nflgIgnore ;
}
- if (pCompileParent == pRunParent)
+ if (pCompileParent -> xNdx == pRunParent -> xNdx)
+ {
+ r -> nCurrRepeatLevel++ ;
+ Node_selfForceLevel (pDomTree, pPrevNode -> xNdx, r -> nCurrRepeatLevel) ; /* make sure we have a node that points out of the loop */
+ pRunNode = Node_selfCondCloneNode (pDomTree, pRunNode, r -> nCurrRepeatLevel) ;
+
+ pRunNode -> xPrev = pPrevNode -> xNdx ;
+ pPrevNode -> xNext = pRunNode -> xNdx ;
+
+ if (pCurrReq -> bDebug & dbgParse)
+ lprintf (pCurrReq, "[%d]Checkpoint: jump backward DomTree=%d Index=%d Node=%d RepeatLevel=%d Line=%d -> Index=%d Node=%d Line=%d SVs=%d\n", pCurrReq -> nPid, xDomTree, nCompileCheckpoint, pPrevNode -> xNdx, r -> nCurrRepeatLevel, pPrevNode -> nLinenumber, nRunCheckpoint, pRunNode -> xNdx, pRunNode -> nLinenumber, sv_count) ;
+
+ }
+ else if (pPrevNode -> xNdx == pRunParent -> xNdx)
{
+ pRunNode = Node_selfLastChild (pDomTree, pRunParent, r -> nCurrRepeatLevel) ;
+ r -> nCurrRepeatLevel++ ;
+ Node_selfForceLevel (pDomTree, pPrevNode -> xNdx, r -> nCurrRepeatLevel) ; /* make sure we have a node that points out of the loop */
pRunNode = Node_selfCondCloneNode (pDomTree, pRunNode, r -> nCurrRepeatLevel) ;
pRunNode -> xPrev = pPrevNode -> xNdx ;
pPrevNode -> xNext = pRunNode -> xNdx ;
if (pCurrReq -> bDebug & dbgParse)
- lprintf (pCurrReq, "[%d]Checkpoint: jump backward DomTree=%d Index=%d Node=%d Line=%d -> Index=%d Node=%d Line=%d SVs=%d\n", pCurrReq -> nPid, xDomTree, nCompileCheckpoint, pPrevNode -> xNdx, pPrevNode -> nLinenumber, nRunCheckpoint, pRunNode -> xNdx, pRunNode -> nLinenumber, sv_count) ;
+ lprintf (pCurrReq, "[%d]Checkpoint: jump backward last child DomTree=%d Index=%d Node=%d RepeatLevel=%d Line=%d -> Index=%d Node=%d Line=%d SVs=%d\n", pCurrReq -> nPid, xDomTree, nCompileCheckpoint, pPrevNode -> xNdx, r -> nCurrRepeatLevel, pPrevNode -> nLinenumber, nRunCheckpoint, pRunNode -> xNdx, pRunNode -> nLinenumber, sv_count) ;
- r -> nCurrRepeatLevel++ ;
}
else
{
if (pCurrReq -> bDebug & dbgParse)
- lprintf (pCurrReq, "[%d]Checkpoint: jump forward2 DomTree=%d Index=%d Node=%d,%d Line=%d -> Index=%d Node=%d,%d Line=%d SVs=%d\n", pCurrReq -> nPid, xDomTree, nCompileCheckpoint, pPrevNode -> xNdx, pCompileParent -> xNdx, pPrevNode -> nLinenumber, nRunCheckpoint, pRunNode -> xNdx, pRunParent -> xNdx, pRunNode -> nLinenumber, sv_count) ;
+ lprintf (pCurrReq, "[%d]Checkpoint: jump backward2 DomTree=%d Index=%d Node=%d,%d Line=%d -> Index=%d Node=%d,%d Line=%d SVs=%d\n", pCurrReq -> nPid, xDomTree, nCompileCheckpoint, pPrevNode -> xNdx, pCompileParent -> xNdx, pPrevNode -> nLinenumber, nRunCheckpoint, pRunNode -> xNdx, pRunParent -> xNdx, pRunNode -> nLinenumber, sv_count) ;
mydie ("Unstrutured backward jump") ;
}
}
+ r -> nCurrCheckpoint = nRunCheckpoint + 1 ;
}
@@ -1230,6 +1246,8 @@
int o ;
+ return 1 ;
+
if (!pArgNode)
{
pArgNode = pNode ;
@@ -1253,7 +1271,7 @@
xNode = pNode -> xNdx ;
- mydie ("DomTree_selfDiscardAfterCheckpoint missing") ;
+ //mydie ("DomTree_selfDiscardAfterCheckpoint missing") ;
#if 0
pOrder = pDomTree -> pOrder ;
o = n = ArrayGetSize (pOrder) ;
@@ -1351,13 +1369,33 @@
/* ------------------------------------------------------------------------ */
/* */
/* Node_cloneNode */
-/* */
-/* clone a node */
-/* bDeep = 1 clone childs also */
-/* bDeep = 0 clone no childs */
-/* bDeep = -1 clone no attributes and no childs */
/* */
-/* ------------------------------------------------------------------------ */
+/*!
+* \_en
+* clones a node
+*
+* @param pDomTree current DomTree we are working on
+* @param pNode node that should be cloned
+* @param nRepeatLevel repeat level for new node
+* @param bDeep determines how childs are handled
+* - 1 clone childs also
+* - 0 clone no childs
+* - -1 clone no attributes and no childs
+* \endif
+*
+* \_de
+* Cloned einen Node
+*
+* @param pDomTree DomTree der den Node enth�lt
+* @param pNode Node der gecloned werden soll
+* @param nRepeatLevel RepeatLevel f�r neuen Node
+* @param bDeep legt fest wie Kindelemente behandelt werden
+* - 1 cloned Kindelemente
+* - 0 cloned keine Kindelemente
+* - -1 cloned keine Attribute und keine Kindelemente
+* \endif
+*
+* ------------------------------------------------------------------------ */
tNodeData * Node_selfCloneNode (/*in*/ tDomTree * pDomTree,
@@ -1415,6 +1453,36 @@
}
+/* ------------------------------------------------------------------------ */
+/* */
+/* Node_cloneNode */
+/* */
+/*!
+* \_en
+* clones a node
+*
+* @param pDomTree current DomTree we are working on
+* @param xNode node that should be cloned
+* @param nRepeatLevel repeat level for new node
+* @param bDeep determines how childs are handled
+* - 1 clone childs also
+* - 0 clone no childs
+* - -1 clone no attributes and no childs
+* \endif
+*
+* \_de
+* Cloned einen Node
+*
+* @param pDomTree DomTree der den Node enth�lt
+* @param xNode Node der gecloned werden soll
+* @param nRepeatLevel RepeatLevel f�r neuen Node
+* @param bDeep legt fest wie Kindelemente behandelt werden
+* - 1 cloned Kindelemente
+* - 0 cloned keine Kindelemente
+* - -1 cloned keine Attribute und keine Kindelemente
+* \endif
+*
+* ------------------------------------------------------------------------ */
tNode Node_cloneNode (/*in*/ tDomTree * pDomTree,
@@ -1434,11 +1502,44 @@
/* ------------------------------------------------------------------------ */
/* */
/* Node_selfCondCloneNode */
-/* */
-/* clone a node if it's part of a different DomTree or has a different */
-/* repeat level in preparation for a modification */
/* */
-/* ------------------------------------------------------------------------ */
+/*!
+* \_en
+* clone a node if it's part of a different DomTree or has a different
+* repeat level in preparation for a modification. This is part of the
+* copy on write stragtegie. As long as a node isn't written to it may
+* point to another node from which the current DomTree was copied or
+* within a different repeat level. Before writing to the node this
+* function has to be called to make sure we are modifing the right node
+*
+* @note Most times you will not call this function directly. All functions
+* that operates on the DomTree makes sure to call this function first
+* for you
+*
+* @param pDomTree current DomTree we are working on
+* @param pNode node that should be cloned
+* @param nRepeatLevel repeat level for new node
+* \endif
+*
+* \_de
+* Cloned einen Node wenn dieser Teil eines anderen DomTree oder eines
+* anderen RepeatLevel ist. Dies ist Teil der "copy on write" Strategie
+* solange ein Node nicht beschrieben wird, kann dieser als Zeiger auf
+* einen anderen Node in einem DomTree oder RepeatLevel aus dem er kopiert
+* wurde sein. Sobald der Node ge�ndert werden mu�, mu� diese Funktion
+* aufgerufen werden um sicherzustellen das der korekte Node modifiziert
+* wird.
+*
+* @note In den meisten F�llen ist es nicht n�tig diese Funktion direkt
+* aufzurufen, da alle Funktionen die den DomTree modifizieren
+* dies sicherstellen.
+*
+* @param pDomTree DomTree der den Node enth�lt
+* @param pNode Node der gecloned werden soll
+* @param nRepeatLevel RepeatLevel f�r neuen Node
+* \endif
+*
+* ------------------------------------------------------------------------ */
tNodeData * Node_selfCondCloneNode (/*in*/ tDomTree * pDomTree,
@@ -1459,6 +1560,7 @@
if (pNode -> xDomTree == pDomTree -> xNdx && pNode -> nRepeatLevel == nRepeatLevel)
return pNode ;
+
if (nRepeatLevel == 0)
{
pLookup = pDomTree -> pLookup ;
@@ -1498,6 +1600,7 @@
if (!(pNew = Node_selfCloneNode (pDomTree, pNode, nRepeatLevel, 1)))
return NULL ;
+ pLookup = pDomTree -> pLookup ;
pLookupLevelNode = pLookup[pNode -> xNdx].pLookupLevel ;
if (!pLookupLevelNode)
{
@@ -1508,6 +1611,7 @@
pLookupLevelNode -> numItems = 8 ;
memset (pLookupLevelNode -> items, 0, sizeof (*pLookupLevelNodeLevel) * 8) ;
}
+ pLookup[pNew -> xNdx].pLookupLevel = pLookupLevelNode ;
pLookupLevelNodeLevel= &pLookupLevelNode -> items[nRepeatLevel & pLookupLevelNode -> nMask] ;
if (pLookupLevelNodeLevel -> pNode)
{
@@ -1529,9 +1633,44 @@
}
+/* ------------------------------------------------------------------------ */
+/* */
+/* Node_selfForceLevel */
+/* */
+/*!
+* \_en
+* returns a pointer to a node for a given index and repeat level. If the
+* node does not exist in the current DomTree or RepeatLevel it is created
+*
+* @param pDomTree current DomTree we are working on
+* @param xNode index for node
+* @param nRepeatLevel repeat level for node
+* \endif
+*
+* \_de
+* Liefert einen Zeiger auf eine Node zu einen gegebenen Index und RepeatLevel.
+* Existiert der Node noch nicht in diesem DomTree oder RepeatLevel wird er
+* erzeugt
+*
+* @param pDomTree DomTree der den Node enth�lt
+* @param xNode index f�r Node
+* @param nRepeatLevel RepeatLevel f�r Node
+* \endif
+*
+* ------------------------------------------------------------------------ */
+tNodeData * Node_selfForceLevel(/*in*/ tDomTree * pDomTree,
+ /*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel)
+ {
+ tNodeData * pNode = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
+
+ return Node_selfCondCloneNode (pDomTree, pNode, nRepeatLevel) ;
+ }
+
+
/* ------------------------------------------------------------------------ */
/* */
/* Node_newAndAppend */
@@ -2293,7 +2432,7 @@
{
if (pNode -> xChilds)
- return Node_selfLevel (pDomTree, Node_selfFirstChild (pDomTree, pNode, nRepeatLevel) -> xPrev, nRepeatLevel) ;
+ return Node_selfNotNullLevel (pDomTree, Node_selfFirstChild (pDomTree, pNode, nRepeatLevel) -> xPrev, nRepeatLevel) ;
return 0 ;
}
@@ -2327,7 +2466,7 @@
do
{
- pChild = Node_selfLevel (pDomTree, pChild -> xNext, nRepeatLevel) ;
+ pChild = Node_selfNotNullLevel (pDomTree, pChild -> xNext, nRepeatLevel) ;
if (nChildNo-- < 2)
return pChild ;
}
@@ -2359,13 +2498,13 @@
if (pNode -> xNext == pNode -> xNdx)
return NULL ;
- if ((pParent = Node_selfLevel (pDomTree, pNode -> xParent, nRepeatLevel)) != NULL)
+ if ((pParent = Node_selfNotNullLevel (pDomTree, pNode -> xParent, nRepeatLevel)) != NULL)
{
if (pParent -> xChilds == pNode -> xNext)
return NULL ;
}
- pNxt = Node_selfLevel (pDomTree, pNode -> xNext, nRepeatLevel) ;
+ pNxt = Node_selfNotNullLevel (pDomTree, pNode -> xNext, nRepeatLevel) ;
if (!pParent)
{
@@ -2391,13 +2530,13 @@
{
- tNodeData * pNode = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
+ tNodeData * pNode = Node_selfNotNullLevel (pDomTree, xNode, nRepeatLevel) ;
tNodeData * pParent ;
if (pNode -> xNext == pNode -> xNdx)
return 0 ;
- pParent = Node_selfLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
+ pParent = Node_selfNotNullLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
if (pParent -> xChilds == pNode -> xNext)
return 0 ;
@@ -2424,11 +2563,11 @@
if (pNode -> xPrev == pNode -> xNdx)
return 0 ;
- pParent = Node_selfLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
+ pParent = Node_selfNotNullLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
if (pParent -> xChilds == pNode -> xNdx)
return 0 ;
- return Node_selfLevel (pDomTree, pNode -> xPrev, nRepeatLevel) ;
+ return Node_selfNotNullLevel (pDomTree, pNode -> xPrev, nRepeatLevel) ;
}
@@ -2447,13 +2586,13 @@
{
- tNodeData * pNode = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
+ tNodeData * pNode = Node_selfNotNullLevel (pDomTree, xNode, nRepeatLevel) ;
tNodeData * pParent ;
if (pNode -> xPrev == pNode -> xNdx)
return 0 ;
- pParent = Node_selfLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
+ pParent = Node_selfNotNullLevel (pDomTree, pNode -> xParent, nRepeatLevel) ;
if (pParent -> xChilds == pNode -> xNdx)
return 0 ;
@@ -2539,6 +2678,8 @@
tNodeData * pFirstNode = pNode ;
+ if (pNode -> nRepeatLevel)
+ nRepeatLevel = pNode -> nRepeatLevel ;
if (pNode -> nType == ntypDocumentFraq)
{
@@ -2555,8 +2696,11 @@
pNode = Node_selfFirstChild (pDomTree, pNode, nRepeatLevel) ;
+
while (pNode)
{
+ if (pNode -> nRepeatLevel)
+ nRepeatLevel = pNode -> nRepeatLevel ;
#if 0
if (pNode -> bFlags & nflgCheckpoint)
{ /* see how the control flow contiounes */
@@ -2666,7 +2810,7 @@
#endif
if (pCurrReq -> bDebug & dbgParse)
- lprintf (r, "[%d]toString: Node=%d type=%d flags=%x text=>%s<= (#%d) SVs=%d\n", r -> nPid, pNode -> xNdx, pNode -> nType, pNode -> bFlags, Ndx2String (pNode -> nText), pNode -> nText, sv_count) ;
+ lprintf (r, "[%d]toString: Node=%d RepeatLevel=%d type=%d flags=%x text=>%s<= (#%d) SVs=%d\n", r -> nPid, pNode -> xNdx, nRepeatLevel, pNode -> nType, pNode -> bFlags, Ndx2String (pNode -> nText), pNode -> nText, sv_count) ;
if (pNode -> bFlags & nflgIgnore)
;
1.4.2.33 +10 -4 embperl/Attic/epdom.h
Index: epdom.h
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.h,v
retrieving revision 1.4.2.32
retrieving revision 1.4.2.33
diff -u -r1.4.2.32 -r1.4.2.33
--- epdom.h 2001/10/23 19:35:13 1.4.2.32
+++ epdom.h 2001/10/24 14:13:15 1.4.2.33
@@ -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.32 2001/10/23 19:35:13 richter Exp $
+# $Id: epdom.h,v 1.4.2.33 2001/10/24 14:13:15 richter Exp $
#
###################################################################################*/
@@ -177,9 +177,10 @@
struct tRepeatLevelLookup
{
- tRepeatLevel numItems ; /* size of table (must be 2^n) */
- tRepeatLevel nMask ; /* mask (usualy numItems - 1) */
- tRepeatLevelLookupItem items[1] ; /* array with numItems items */
+ tNode xNullNode ; /**< node index of node with RepeatLevel == 0 */
+ tRepeatLevel numItems ; /**< size of table (must be 2^n) */
+ tRepeatLevel nMask ; /**< mask (usualy numItems - 1) */
+ tRepeatLevelLookupItem items[1] ; /**< array with numItems items */
} ;
typedef struct tRepeatLevelLookup tRepeatLevelLookup ;
@@ -351,6 +352,7 @@
#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_parentNode(pDomTree,xNode,nLevel) (Node_selfLevel(pDomTree,xNode,nLevel)->xParent)
#define Node_selfParentNode(pDomTree,pNode,nLevel) (Node_selfLevel(pDomTree,(pNode)->xParent,nLevel))
@@ -373,6 +375,10 @@
tNodeData * Node_selfCondCloneNode (/*in*/ tDomTree * pDomTree,
/*in*/ tNodeData * pNode,
/*in*/ tRepeatLevel nRepeatLevel) ;
+
+tNodeData * Node_selfForceLevel(/*in*/ tDomTree * pDomTree,
+ /*in*/ tNode xNode,
+ /*in*/ tRepeatLevel nRepeatLevel) ;
tNode Node_cloneNode (/*in*/ tDomTree * pDomTree,
/*in*/ tNode xNode,
---------------------------------------------------------------------
To unsubscribe, e-mail: embperl-cvs-unsubscribe@perl.apache.org
For additional commands, e-mail: embperl-cvs-help@perl.apache.org